最短路徑條數問題 廣度優先搜尋

2021-07-23 22:59:14 字數 953 閱讀 8646

給定如圖所示的無向連通圖,假定圖中所有邊的權值都為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....