最短路徑演算法 Dijkstra演算法與Floyd演算法

2021-06-14 23:36:26 字數 2391 閱讀 3103

定義圖和路徑結構:

#define vex			4 //頂點數

#define infinty 1000 //沒有路徑

#define undescide -1 //下一跳節點未定

typedef struct __shortpathtable

shortpathtable;

typedef struct __mygraph

mygraph;

演算法過程:

void shortestpath_dij(mygraph *graph, int v0, shortpathtable *path)

else

}vexflag[v0] = 1;//標記起始點

for(count = 1; count < graph->vexnum; count++)

}vexflag[index] = 1;//標記具有最小弧的節點,加入到最短路徑中

//更新最短路徑

for(i = 0; i < graph->vexnum; i++)

}} }

}void printshortestpath(shortpathtable *path, int src, int dst)

}while(node != src);

printf("從%d到達%d的最短路徑長度是%d, 路徑是:", src, dst, path[dst].arc);

printf("%d", src);

for(i -= 2; i >= 0; i--)

printf("\n");

}int main()

} graph.vexnum = vex;

shortestpath_dij(&graph, 3, path);

printshortestpath(path, 3, 0);

printshortestpath(path, 3, 1);

printshortestpath(path, 3, 2);

}

測試:

測試圖為

測試結果:

定義圖和路徑結構:

#define vex			4 //頂點數

#define infinty 1000 //沒有路徑

#define undescide -1 //下一跳節點未定

typedef struct __shortpathtable

shortpathtable;

typedef struct __mygraph

mygraph;

演算法過程:

void shortestpath_floyd(mygraph *graph, shortpathtable path[vex])

else

}} //計算最短路徑

for(i = 0; i < graph->vexnum; i++)

}} }

}void printshortestpath(mygraph *graph, shortpathtable path[vex])

printf("\n"); }}

void findshortestpath(mygraph *graph, shortpathtable path[vex])

dst = j;

nexthop = i;

count = 0;

while(nexthop != dst && nexthop != undescide)

if(nexthop == undescide)

printf("%d 到 %d 的最短路徑是: %d->", i, j, i);

for(m = 0; m < count - 1; m++)

printf("%d\n", j);

} printf("\n"); }}

int main()

} graph.vexnum = vex;

shortestpath_floyd(&graph, path);

printshortestpath(&graph, path);

findshortestpath(&graph, path);

}

測試:

圖結構同dijkstra

結果為:

Dijkstra最短路徑演算法

基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...

Dijkstra最短路徑演算法

引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...

最短路徑 Dijkstra演算法

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...