廣度優先搜尋,即在遍歷解答樹時使每次狀態轉移時擴充套件出盡可能多的新狀態,並且按照各個狀態出現的先後順序依次擴充套件。其在解答樹上的表現為對解答樹的層次遍歷。
題目描述:
城堡是乙個a*b*c的立方體,可以被表示成a個b*c的矩陣,開始位置為(0,0,0),離開城堡的門在(a-1,b-1,c-1)的位置,
魔王t分鐘後回到城堡,tom每分鐘能從乙個座標走到相鄰的六個座標中的乙個,請計算tom能否在回來之前離開城堡。
如果可以,輸出需要多少分鐘才能離開,不能輸出-1.
輸入:第一行整數k,表明測試資料的數量。
四個整數a,b,c,t(1<=a,b,c<=50,1<=t<=1000),表示城堡大小和回來的時間。
然後是a塊輸入資料,每塊輸入資料有b行,每行有c個正整數,代表迷宮的布局,0代表路,1代表牆。
樣例輸入:
13 3 4 20
0 1 1 1
0 0 1 1
0 1 1 1
1 1 1 1
1 0 0 1
0 1 1 1
0 0 0 0
0 1 1 0
0 1 1 0
樣例輸出:
11思路:
1.使用結構體儲存每乙個狀態
2.使用佇列
3.標記陣列mark[x][y][z],當已經得到過包含(x,y,z)的狀態後,即把mark[x][y][z]置為true。
當下次再有某狀態擴充套件出包含該座標的狀態時,直接丟棄,不對其進行任何處理。
**如下:
#include using namespace std;
struct n
;bool mark[50][50][50];
int maze[50][50][50];
queueq;
int go[3]=;
int bfs(int a,int b,int c)
}return -1;
}int main()}}
while(q.empty()==false) q.pop();
mark[0][0][0]=true;
n tmp;
tmp.t=tmp.x=tmp.y=tmp.z=0;
q.push(tmp);
//bfs(a,b,c);
int rec=bfs(a,b,c);//廣度優先搜尋
//cout
cout
cout<<"-1"<}
return 0;
}
王道機試練習 勝利大逃亡之廣度優先搜尋
ignatius 被魔王抓走了 有一天魔王出差去了 這可是 ignatius 逃亡的好機會 魔王住在乙個城堡裡 城堡是乙個 abc 的立方體 可以被表示成 a 個 b c 的矩 陣,剛開始 ignatius 被關在 0,0,0 的位置 離開城堡的門在 a 1,b 1,c 1 的位置 現 在知道魔王將...
BFS廣度優先搜尋
廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...
bfs廣度優先搜尋
這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...