Dijkstra算法是典型的最短路径路由算法,用来计算一个节点到其他所有节点的最短路径。
思路如下:
1.初始化距离d[]
2.找到未访问的最近的值,记录下来temp;
3.以temp为基准更新d[]
C++实现如下
void DJ(int x){
fill(d, d + maxn, INF);
d[x] = 0;
for (int i = 0; i < n; i++){
int u = -1, min = INF;
for (int j = 0; j < n; j++){
if (inq[j]==false&&d[j] < min){
u = j;
min = d[j];
}
}//找到未访问的最近的值
if (u == -1) return;
inq[u] = true;//设为已经访问
//优化更新d[]
for (int j = 0; j < n; j++){
if (d[u] + map[u][j] < d[j]&&inq[j]==false){
d[j] = d[u] + map[u][j];
}
}
}
}