Dijkstra算法是用来求单原最短路径的算法,对于有向图和无向图都适用
Dijkstra算法
数据结构
int dist[1001];//表示v到i节点的最短距离
int already[1001];//表示已经找到最短距离的点
int edge[101][101];//存储边
int p[1001];//存储节点
算法思路
- 首先初始化,将和v节点有直接路径的点的dist赋值为edge[v][i],一开始already数组中只有v一个节点
- 通过找不在already数组中的点,并且dist最小的点,将其序号赋给k,并将这个点放到already中
- 通过对于每一个不在already中的点i比较dist[k]+edge[k][i]是否小于dist[i],如果是,将dist[i]重新赋值,并且将k赋给i的前一个节点,重复第二步
for (i = 0; i < n ; i++){
dist[i] = edge[v][i];
p[i] = -1;
already[i] = 0;
}
dist[v] = 0;
already[v] = 1;
for (i = 1; i < n ; i++){
min = Infinity;
for (j = 0; j < n ; j++){
if (!already[j] && dist[j] < min){
k = j;
min = dist[j];
}
}
already[k] = 1;
for (j = 0; j < n ; j++){
if (!already[j] && (dist[j] > min+edge[k][j])){
dist[j] = min+edge[k][j];
p[j] = k;
}
}
}