1. 程式人生 > >單源無權最短路徑問題

單源無權最短路徑問題

單源無權最短路徑問題
由一個點到圖中所有點的最短路徑;

思路:使用BFS遍歷,從給定的點開始,層次遍歷;按照遞增的順序找出最短路徑

在這裡插入圖片描述

使用一個dist陣列儲存距離;path陣列儲存路徑;

void BFS(Graph G, int i) 
 //給定一個圖,和圖中的一個頂點,找出這個點到其它點的最短路徑,和到其它點的路徑
{
	linkQueue Q;  
	Adj W;
	int V;
	Q = createQueue();   // 建立空佇列
	AddQ(Q, i); // 入隊
	dist[i] = 0;  // 頂點到自身的距離為0;
	while (!Emptry(Q))
	{
V = DelQ(Q); // 出隊 for (W = G->G[V].FirstEdge; W; W = W->next) // 使用鄰接表儲存圖,遍歷和頂點相連的其它點 { if (dist[W->Adjv] == -1) //判斷點有沒有訪問過 { dist[W->Adjv] = dist[V] + 1; // 遞推求出距離 path[W->Adjv] = V; // 儲存路徑 AddQ(Q, W->Adjv); // 入隊 } } } }