單源無權最短路徑問題
阿新 • • 發佈:2018-11-22
單源無權最短路徑問題
由一個點到圖中所有點的最短路徑;
思路:使用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); // 入隊
}
}
}
}