dijkstra算法是什么?迪杰斯特拉算法是什么?

问题描述:

dijkstra算法是什么?
迪杰斯特拉算法是什么?

迪杰斯特拉算法用于求解一个有向图(也可以是无向图,无向图是有向图的一种特例)的一个点(称之为原点)到其余各点(称之为周边点)的最短路径问题.算法构思很是巧妙(我这么认为),简直达到了“无心插柳柳成荫”的境界.算法本身并不是按照我们的思维习惯——求解从原点到第一个点的最短路径,再到第二个点的最短路径,直至最后求解完成到第n个点的最短路径,而是求解从原点出发的各有向路径的从小到大的排列(如果这个有向图中有环1-2-3-1算法岂不是永无终结之日了?!),但是算法最终确实得到了从原点到图中其余各点的最短路径,可以说这是个副产品,对于算法的终结条件也应该以求得了原点到图中其余各点的最短路径为宜.清楚了算法的这种巧妙构思后,理解算法本身就不是难题了.
算法把一个图(G)中的点划分成了若*分:
1):原点(v);
2):所有周边点(C);
另外有一个辅助集合S,从v到S中的点的最短路径已经求得.S的最初状态是空集.
这样就可以进一步划分图(G):
1):原点(v);
2):已求出v至其最短路径的周边点(S);
3):尚未求出v至其最短路径的周边点(Other=C-S);
算法的主体思想:
A、找到v——Other所有路径中的的最短路径vd=v——d(Other的一个元素);
B、找到v——S——Other所有路径中的的最短路径vi=v——i(Other的一个元素);
C、比较vd和vi如果vd