1. 程式人生 > 實用技巧 >最短路徑問題Dijkstra演算法的簡單使用

最短路徑問題Dijkstra演算法的簡單使用

圖的應用非常廣泛,下面就說說圖的最短路徑問題,使用的是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