★ 實驗任務
眾所周知,索隆是乙個路痴,一天在一小島上,他又迷路了! !好**山治心急如焚,
決定出去找他,由於練成了月步,山治的速度竟然達到了正無窮!小島上除了空地,還有盤
絲洞(簡稱 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...