廣度優先搜尋(BFS) 勝利大逃亡

2021-08-22 12:10:57 字數 1285 閱讀 8620

廣度優先搜尋,即在遍歷解答樹時使每次狀態轉移時擴充套件出盡可能多的新狀態,並且按照各個狀態出現的先後順序依次擴充套件。其在解答樹上的表現為對解答樹的層次遍歷。

題目描述:

城堡是乙個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 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...