摘要:在乙個無權圖中,尋找某個節點到其它所有節點的最短路徑.
基本思路:(1)首先找到與起始節點相鄰接的所有節點,那麼它們的最短路徑就是1.並且將這些訪問過的節點標誌為已經訪問.容易知道,其餘所有沒有訪問的節點中存在的最短路徑是2.而且這些節點都是第一批訪問的節點的鄰接節點…..,如果最短路徑為k的節點已經被訪問,那麼剩下節點中最短路徑就是k+1,而且一定由路徑長是k的節點連線到它們的。這很容易證明.
(2)我們選用佇列來實現這個演算法,因為如果簡單的使用陣列,效率比較低下.
首先選中起始節點,將它相鄰的節點都放入佇列中,並且標記最短路徑長度為1。然後從佇列逐個將節點出隊,檢測每乙個出隊節點的相鄰節點,如果該節點的尚未被更新,入隊並且在原來的最短路徑上+1,否則檢測下乙個節點.直到隊列為空.
注意,本段**的標頭檔案已經包含了關於佇列的adt
#include "stdafx.h"
#include "圖論基本adt.h"
typedef struct tablerecord table[number];
#define infinity 10000
struct tablerecord
;void initable(table t,int s)
t[s].distance = 0;
t[s].known = true;
t[s].path = s;
}void unweighedsearch(table t,graph g,int s)
g[v] = g[v]->next;}}
}
無權邊單源最短路徑
無權邊單源最短路徑相對來說比較簡單,邊數就是路徑長度。從出發點開始,先收集路徑為0頂點 它本身 然後收錄他的鄰頂點 路徑為1 再依次收錄長度為2,3,4.整個過程其實就是乙個廣度優先搜尋 bfs 但是需要做些改變,需要乙個陣列d w 來記錄頂點w到源點s的路徑長度,開始時要將d w 初始化 為 1,...
無權最短路 寬度優先搜尋
2017 09 13 21 54 52 writer pprp 圖論全部都忘記了,重新學一下吧,之前學的實在是太爛了 測試資料如下 7 12 頂點個數,路徑個數 3 11 4 1 22 4 2 54 3 4 54 6 4 73 6 5 76 7 3 起始點 如下 theme 無權最短路徑問題 com...
三十一 無權最短路徑排序
最短路徑排序就好比我們從a城市出發到e城市辦事,中間根據選擇不同的路可能經過b,c,d三座城市,那麼我們怎麼選擇出行路線能讓我們以最快時間到達e城市就成了乙個問題,而最短路徑排序就是解決這種問題的一種方案。其實最短路徑排序,就是對整個有向圖進行一次搜尋,此方法也被稱為廣度優先搜尋,類似於樹的層序遍歷...