dijkstra

作者: buenos_dan | 来源:发表于2020-05-25 17:58 被阅读0次
微信截图_20200525173649.png

如图所示,dijkstra算法需要的几个关键变量如下:

visited: 标识已经被访问过的节点,即该节点的所有邻接节点都已探索过了。
初始化时是空列表 [ ],之后不断向里面添加访问过的节点
unvisit: 标识未被访问的节点,也是即将要被访问的节点,需要按链路距离逐层添加。
初始化时是只有源节点的列表 [ src ] ,之后按其到源节点的链路距离逐个添加。
链路距离表示两节点的跳数。如A到C的链路距离为2.
如图,如果规定A为源节点,则由A首先探索其邻接节点B,D,此时unvisit = [ B , D ],(注,A已经被拿来探索了,所以已经被pop出了unvisit列表),然后下一个循环,从 unvisit中pop出B, 探索B的邻接节点,并加入到unvisit中,此时unvisit = [ D, E, C ]。

一个如图的结构体
typedef result{
int vertex;
float dis;
int preVertex;
}
则一个保存源节点到所有节点的距离和前驱节点的列表 results = [ result1, result2,...]
通过不断探索,不断更新最短路径和前驱节点,即可计算全图的最短路径。

最后附上python 代码:

def dijkstra(graph, src):
    visited = []
    unvisited = [ src ]
    shortestDis = [ INT_MAX for i in range(vertexNum)]
    shortestDis[src] = 0
    preVertex = [None for i in range(vertexNum)]
 
    while unvisited:
        vertex = unvisited.pop(0)
        for i in range(vertexNum):
            if graph[vertex][i] < INT_MAX and i not in visited:
                if i not in unvisit:
                    unvisited.append(i)
                tempDis = graph[vertex][i] + shortestDis[vertex]
                if tempDis < shortestDis[i]:
                    shortestDis[i] = tempDis
                    preVertex[i] = vertex
        visited.append(vertex)
                

相关文章

  • Dijkstra

    Dijkstra Conception Dijkstra is a single source shortest ...

  • 最短路径模板

    堆优化的Dijkstra 普通Dijkstra SPFA

  • 图算法(二)最短路

    本文将介绍三种常见的最短路算法:Dijkstra,Floyd,SPFA Dijkstra Dijkstra是有向图...

  • 图的最短路径

    Dijkstra算法&Floyd算法 一、Dijkstra算法 Dijkstra算法思想: 只计算v0出发到其他顶...

  • 深入解析Dijkstra's Algorithm ——

    什么是Dijkstra算法? Dijkstra算法是用来寻找最短路径最著名的算法之一。具体来说,Dijkstra算...

  • 算法模板(三)最短路问题

    Dijkstra SPFA Floyd

  • DFS BFS

    BFS DFS Dijkstra

  • ——Dijkstra

    dijkstra由于是贪心的,每次都找一个距源点最近的点(dmin),然后将该距离定为这个点到源点的最短路径。但如...

  • Dijkstra

  • Dijkstra

    1.问题 单源最短路径 2 最短路径数组就是当前各个节点到A的距离前驱数组就是相应距离的前一个节点 此时在V-S中...

网友评论

      本文标题:dijkstra

      本文链接:https://www.haomeiwen.com/subject/uaxuahtx.html