輸入乙個數值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 我一開始就是覺得用廣度優先搜尋,結果在廣度優...