Dijkstra(单源最短路算法)
typedef struct gra{ ?//頂點
int val;
int weight;
}graph;
graph g[1005][1005],dist[1005]; //圖 ?和 ?最短路徑
int visit[1005]; //頂點是否已被訪問
void dijkstra(int start,int n){
int min,u;
for(int i=1;i<=n;i++){ //初始化最短路徑數組 和 訪問數組
dist[i].val = MAXVAL;
visit[i]=0;
}
for(int i=1;i<=n;i++){ //計算源點到各頂點的最短路徑
if(g[start][i].val < MAXVAL){
dist[i].val = g[start][i].val;
dist[i].weight = g[start][i].weight;
}
}
visit[start] = 1; //設置源點已被訪問
dist[start].val = 0; //源點到源點的距離為0
for(int i=1;i<=n;i++){ //計算n輪后最短路徑
min = MAXVAL;
u = 0;
for(int k=1;k<=n;k++){ ? ? ?//找出每一輪新的最短路徑的頂點
if(visit[k]==0 && dist[k].val < min){
min = dist[k].val;
u = k; //設置該頂點為新的起點
}
}
visit[u] = 1; //設置該頂點已被訪問
for(int j=1;j<=n;j++){ //以新頂點為起點,更新最短路徑
if(visit[j]==0 && dist[j].val > (dist[u].val + g[u][j].val)){//如果 源點到新起點的距離?加上?新起點到各點的距離,比 源點 到 各點 的距離短,更新最短路徑
dist[j].val = dist[u].val + g[u][j].val;
dist[j].weight = dist[u].weight + g[u][j].weight;
}else if(visit[j]==0 && dist[j].val == (dist[u].val + g[u][j].val)){//如果距離相等,則選擇花費較小的路徑作為最短距離
if(dist[j].weight > (dist[u].weight + g[u][j].weight)){
dist[j].weight = dist[u].weight + g[u][j].weight;
}
}
}
}
}
轉載于:https://www.cnblogs.com/ruowei/p/5995160.html
總結
以上是生活随笔為你收集整理的Dijkstra(单源最短路算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Base64的用法
- 下一篇: Java JFrame 和 Frame