Dijkstra:最短路径问题
使用广度优先方法解决最短路径问题
伪代码描述
1 function Dijkstra(G, w, s)
2 for each vertex v in V[G] //初始化 3 d[v] := infinity //将各点的已知最短距离先设成无穷大 4 previous[v] := undefined //各点的已知最短路径上的前趋都未知 5 d[s] := 0 //因为出发点到出发点间不需移动任何距离,所以可以直接将s到s的最小距离设为0
6 S := empty set
7 Q := set of all vertices
8 while Q is not an empty set // Dijkstra演算法主体 9 u := Extract_Min(Q)
10 S.append(u)
11 for each edge outgoing from u as (u,v)
12 if d[v] > d[u] + w(u,v) //拓展边(u,v)。 w(u,v)为从u到v的路径长度。
13 d[v] := d[u] + w(u,v) //更新路径长度到更小的那个和值。
14 previous[v] := u //纪录前趋顶点
代码书写过程:
- 进行基本的结构体定义,图的建立(邻接矩阵/邻接表)
- 初始化 Init_Graph 将Graph[][] = max
void InitGraph(int N)
{