最短路徑問題Dijkstra演算法的簡單使用
阿新 • • 發佈:2020-08-12
圖的應用非常廣泛,下面就說說圖的最短路徑問題,使用的是Dijkstra,
其實就是將距離這個點最近的鄰接點收進來,然後更新與其他點的距離,然後再收其他點
void Dijstra(Graph *G,int v0){ int S[Maxsize] = {0}; int dist[Maxsize]; int path[Maxsize]; for (int i = 0; i < G->vexnum; i++) { dist[i] = G->arcs[v0][i]; if (dist[i]<1000) { path[i]= v0; } else { path[i] = -1; } } S[v0] = 1; dist[v0] = 0; path[v0] = -1; while (1) { int k; int a = 1000; int flag = 0; for (int j = 0; j < G->vexnum; j++) { if (S[j]==0) { flag= -1; if (S[j]<a) { a = S[j]; k = j; } } } S[k] = 1; if (flag==0) { break; } for (int i = 0; i < G->vexnum; i++) {if (S[i] != 1 && dist[k] + G->arcs[k][i] < dist[i]) { dist[i] = dist[k] + G->arcs[k][i]; path[i] = k; } } } }
好了,我們下回見,peace