最短路徑問題 廣度優先搜尋解法

2021-09-28 17:18:43 字數 863 閱讀 2823

輸入乙個數值n,表示一塊nxn的區域,其中數值1表示訊號強,0表示訊號弱,例如:

1 0 1

1 1 1

1 1 1

尋找所有訊號強的路徑(不包含0)中的最短路徑,並輸出其最短路徑的值,如果不存在最短路徑(到不了右下角),則輸出-1。

思路:將整個nxn陣列建立成乙個二維圖,利用廣度優先搜尋演算法進行搜尋,直到命中右小角元素。

**如下:

#include #include #include //用佇列實現廣度優先搜尋

using namespace std;

struct node//圖的節點

};int main()

}//給所有節點賦值,並且連線其上下左右的節點

int dis=-1;

queues;//s中儲存節點的位置(node*)

if(a[0][0].val==0)

return -1;

s.push(&a[0][0]);

a[0][0].tovisit=true;

while(!s.empty())

if(cur->left&&!cur->left->tovisit&&cur->left->val==1)

if(cur->down&&!cur->down->tovisit&&cur->down->val==1)

if(cur->right&&!cur->right->tovisit&&cur->right->val==1)

}//遍歷完每一層後

dis++;//將距離+1

} cout<<-1;

system("pause");

return 0;

}

(原創)廣度優先搜尋解決最短路徑問題

廣度優先搜尋用於解決兩種問題 1.從某點到某點是否存在路徑?2.若存在,最短的是哪條?1.圖有點和邊組成。2.當圖中的所有邊的指向都是單向的,這種圖叫做有向圖。若a指向b,則b為a的鄰居。3.當圖中存在一條或一條以上的沒有箭頭的邊,即a指向b,且b指向a,這種圖成為無向圖。其中,a和b互為鄰居。4....

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

給定如圖所示的無向連通圖,假定圖中所有邊的權值都為1,顯然,從源點a到終點t的最短路徑有多條,求不同的最短路徑的數目。ps 上圖的a是第0號節點,b是第1號節點,其他同理。權值相同的最短路徑問題,則單源點dijkstra演算法退化成bfs廣度優先搜尋 廣度優先搜尋,即 從a 走一步可以到達b或e 走...

利用廣度優先搜尋求最短路徑

注 下面是以無權的圖為基礎的 廣度優先搜尋 輸入 輸入n個頂點,m條邊,起點的編號 跟著再輸入邊x,y 輸出 該起點到達各個頂點最少經過幾條邊 按編號從小打大輸出,包括自己哦 樣例 輸入 5 5 2 1 22 3 2 43 4 3 5 輸出 1 0112 我一開始就是覺得用廣度優先搜尋,結果在廣度優...