bfs不同於dfs,它不需要用到顯式的遞迴操作,而是將狀態儲存在佇列中,可以用來求權值為1的最短路。
每次都將隊首的元素取出,然後將可以由這個元素經過一步操作達到的放入隊尾。在最短路問題中只要到達過的節點,之後就不會再到達。
給定乙個n*m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。
最初,有乙個人位於左上角(1, 1)處,已知該人每次可以向上、下、左、右任意乙個方向移動乙個位置。
請問,該人從左上角移動至右下角(n, m)處,至少需要移動多少次。
資料保證(1, 1)處和(n, m)處的數字為0,且一定至少存在一條通路。
第一行包含兩個整數n和m。
接下來n行,每行包含m個整數(0或1),表示完整的二維陣列迷宮。
輸出乙個整數,表示從左上角移動至右下角的最少移動次數。
1≤n,m≤100
5 50 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
#include
#include
#include
using
namespace std;
const
int n =
110;
int m, n;
typedef
struct queuequeue;
queue q;
int map[n]
[n];
int flag[n]
[n];
int dir[4]
[2]=
;// 左右下上
intbfs()
else}}
return flag[n]
[m];
}// 寬搜
intmain()
}memset
(flag,-1
,sizeof flag)
; q.value[q.ed][0
]=1;
q.value[q.ed][1
]=1;
flag[1]
[1]=
0;cout <<
bfs(
)<< endl;
return0;
}
原題鏈結 寬搜 走出迷宮
描述 當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。假設你已經得到了乙個n m的迷宮的圖紙,請你找出從起點到出口的最短路。輸入第一行是兩個整數n和m 1 n,m 100 表示迷宮的行數和列數。接下來n行,每行乙個長為m的字串,表示整個迷宮...
luogu P1141 01迷宮 寬搜
有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入格式 輸入的第1行為兩個正整數n,m。下面n行,每行n個字元,...
5 逃離迷宮(bfs 寬搜 )
給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...