数据结构(图1)

图的问题,核心是解决3种情况

1.有若干小镇,小镇之间有的有路,有的没路。现在我想修路,使小镇之间互相连通(A和B之间可能没有路,但A通过C可以到B),请问我现在至少要修几条路?

解决方案:

首先要有一个概念,当一群小镇互相连通时,我们说,这是一个“连通块”。尝试遍历所有小镇,由于连通快个数一定大于1,那么有n个连通快,就说明遍历中断n-1次,就修n-1条路。

图片发自简书App

2.我要和可爱迷人善良温柔的女朋友要从杭州去南京旅游。女朋友说“我们走最短的路径到南京吧”。但地图上只标注了城市的两两距离(A到B,B到C,C到A的形式)。请问怎么求杭州到南京的最短路径呢?

解决方案:

中介点概念:假设已知A到B的距离为d1。现在发现A到C,C到B的距离为d2,而且d2<d1。那么目前C就是中介点,A到C,C到B的距离之和就是目前A到B的最短距离。假设A到C的距离为d3,然后我们又发现,A到D,D到C的距离d4<d3,那么D就成为A到C的中介点,经过C,D的路线距离就是目前A到B的最短距离。你应该想到了,所谓的中介点其实就是前驱点,当前驱点越来越多,直至与A重合时,A到B的最短路径(包括距离,途经的点)就形成了。记录下前驱点,我们的路线也就确定了。

很容易想到一个问题,一个点的前驱点是固定的吗?回答是no.一个点的前驱点有可能发生变化,但一定是以下这种情况:

图片发自简书App

那么有没有可能发生前驱点被“替换”的情况呢?即:

图片发自简书App

这种情况是不可能的,因为:

图片发自简书App

具体算法(Dijsktra)

图片发自简书App
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容