資料結構 廣度優先搜尋

2021-06-27 08:06:16 字數 1347 閱讀 4960

★ 實驗任務

眾所周知,索隆是乙個路痴,一天在一小島上,他又迷路了! !好**山治心急如焚,

決定出去找他,由於練成了月步,山治的速度竟然達到了正無窮!小島上除了空地,還有盤

絲洞(簡稱 psd),盤絲洞裡住著可愛的妹紙,山治每次經過乙個盤絲洞,都要停留乙個單

位時間來欣賞妹紙, 給你乙個 n*m 的地圖以及山治和索隆當前位置, 山治想請你幫他算算他

最快要多久才能見到索隆。

★ 資料輸入

輸入第一行為兩個正整數 n,m (2 <=n,m <=1000),表示有 n 行 m 列,最左上角的座標為

(1,1) 。

接下來 n 行,每行 m 個字元, 「.」代表盤絲洞, 「x」代表空地,只有『.』和』x』兩種字

符,山治通過盤絲洞需 1 個單位時間,通過空地無需花費時間。

最後兩行分別表示山治和索隆的當前座標。 (你可以假設這兩個座標都在空地上,即

『x』 ) 。

★ 資料輸出

對於每個詢問,輸出一行乙個整數,表示山治最快見到索隆的時間。

輸入示例  輸出示例

6 6..x...

***.x.

....x.

x.....

x.....

x.x...

3 56 3

1.廣度優先搜尋

策略:1.push當前點的未訪問過的上下左右點,

2.選取佇列中 dis最小的那個重複步驟1

3結束條件是:從佇列中選出的那個點就是終點時,返回dis

#include#include#includeusing namespace std;

const int n=1010;

bool g[n][n],vis[n][n];

int n,m;

struct node

};priority_queueq;

void tovist(const node &cur,node &next)

}int bfs(const node&s,const node&e)

; vis[s.x][s.y]=true;

q.push(cur);

while(!q.empty())

}return -1;

}int main()

{ int i,j,ans;

char str[n];

node s,e;

while(~scanf("%d %d",&n,&m)){

memset(vis,0,sizeof(vis));

memset(g,0,sizeof(g));

while(!q.empty())q.pop();

for(i=0;i

廣度優先搜尋 資料結構

廣度優先搜尋 bfs 的乙個常見應用是找出從根結點到目標結點的最短路徑。結點的處理順序是越是接近根結點的結點將越早地遍歷。佇列的入隊和出隊順序是新新增的節點不會立即遍歷,而是在下一輪中處理。結點的處理順序與它們新增到佇列的順序是完全相同的順序,即先進先出 fifo 這就是我們在 bfs 中使用佇列的...

資料結構與演算法 搜尋 一 廣度優先搜尋

首先需要說明,這裡所說的廣度優先搜尋,與利用廣度優先搜尋對圖進行遍歷有一定的差別。廣度優先搜尋確實可以以被應用在圖的遍歷當中,但其應用遠不僅如此。我們通過乙個例題,引出廣度優先搜尋 例 勝利大逃亡 題目描述 ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會,魔王住...

資料結構與演算法 廣度優先搜尋1

廣度優先搜尋演算法 先查詢離起始頂點最近的,然後是第二進的,這樣依次往外搜尋。樹的層次遍歷就是乙個廣度搜尋演算法。一般需要用到佇列這個資料結構,但是如果你是c語言開發,並且是在考試中,時間有限。一般臨時寫乙個佇列出來還是很耗時間的,所以一般用乙個大陣列來模擬佇列。今天做了兩道力扣題目,總結一下bfs...