給定如圖所示的無向連通圖,假定圖中所有邊的權值都為1,顯然,從源點a到終點t的最短路徑有多條,求不同的最短路徑的數目。
ps:上圖的a是第0號節點,b是第1號節點,其他同理。
權值相同的最短路徑問題,則單源點dijkstra演算法退化成bfs廣度優先搜尋:廣度優先搜尋,即:
從a:走一步可以到達b或e
走兩步可以到達c或f
走三步可以到達d或g或k
像這樣每走一步,向後不停的擴充套件。
因此,定義:
起點為0,終點為n
step[i]:表示到達第i號節點的最短路徑的長度,如:step[4] = 1,step[6] = 3。
pathnum[i]:到達第i號節點的最短路徑的數目。
首先,將初始化step[i]和pathnum[i]初始化為0,i = 0, 1, …, n-1],並令pathnum[0]= 0,自己到自己有1條路嘛。
然後考慮「已經求出step和pathnum的前i個值時如何求第i+1個值」:
若step[i] = 0,則說明i還未到達過j,即:當前是第一次到達j,因此:
step[j] = step[i]+1,pathnum[j] = pathnum[i]
若step[j] = step[i]+1,則說明曾經從i到達過j了,而且這是最短路徑的乙個解決方案,因此:
pathnum[j] = pathnum[i]
最後,當擴充套件到節點n時,演算法終止。
最短路徑問題 廣度優先搜尋解法
輸入乙個數值n,表示一塊nxn的區域,其中數值1表示訊號強,0表示訊號弱,例如 1 0 1 1 1 1 1 1 1 尋找所有訊號強的路徑 不包含0 中的最短路徑,並輸出其最短路徑的值,如果不存在最短路徑 到不了右下角 則輸出 1。思路 將整個nxn陣列建立成乙個二維圖,利用廣度優先搜尋演算法進行搜尋...
利用廣度優先搜尋求最短路徑
注 下面是以無權的圖為基礎的 廣度優先搜尋 輸入 輸入n個頂點,m條邊,起點的編號 跟著再輸入邊x,y 輸出 該起點到達各個頂點最少經過幾條邊 按編號從小打大輸出,包括自己哦 樣例 輸入 5 5 2 1 22 3 2 43 4 3 5 輸出 1 0112 我一開始就是覺得用廣度優先搜尋,結果在廣度優...
(原創)廣度優先搜尋解決最短路徑問題
廣度優先搜尋用於解決兩種問題 1.從某點到某點是否存在路徑?2.若存在,最短的是哪條?1.圖有點和邊組成。2.當圖中的所有邊的指向都是單向的,這種圖叫做有向圖。若a指向b,則b為a的鄰居。3.當圖中存在一條或一條以上的沒有箭頭的邊,即a指向b,且b指向a,這種圖成為無向圖。其中,a和b互為鄰居。4....