九度 題目1456 勝利大逃亡

2021-06-27 18:25:49 字數 1704 閱讀 4577

題目描述:ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a*b*c的立方體,可以被表示成a個b*c的矩陣,剛開始ignatius被關在(0,0,0)的位置,離開城堡的門在(a-1,b-1,c-1)的位置,現在知道魔王將在t分鐘後回到城堡,ignatius每分鐘能從乙個座標走到相鄰的六個座標中的其中乙個.現在給你城堡的地圖,請你計算出ignatius能否在魔王回來前離開城堡(只要走到出口就算離開城堡,如果走到出口的時候魔王剛好回來也算逃亡成功),如果可以請輸出需要多少分鐘才能離開,如果不能則輸出-1.

輸入:輸入資料的第一行是乙個正整數k,表明測試資料的數量.每組測試資料的第一行是四個正整數a,b,c和t(1<=a,b,c<=50,1<=t<=1000),它們分別代表城堡的大小和魔王回來的時間.然後是a塊輸入資料(先是第0塊,然後是第1塊,第2塊......),每塊輸入資料有b行,每行有c個正整數,代表迷宮的布局,其中0代表路,1代表牆。

輸出:對於每組測試資料,如果ignatius能夠在魔王回來前離開城堡,那麼請輸出他最少需要多少分鐘,否則輸出-1.

樣例輸入:

1

3 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

題目分析:

解決迷宮類似問題,如果是能不能到達,一般選用的是dfs,如果是求最短步數,一般選用的是bfs。

基本思路:

1、輸入資料儲存至結構體;

2、從開始節點開始依次入佇列,bfs訪問,沒遍歷一層步數加一,發現到終點,就退出。

3、比較最後的步數是否小於所給的時間。

**如下:

#include

#include

#include

#define inf 1000000000;

using namespace std;

const int maxsize = 51;

int maze[maxsize][maxsize][maxsize];

int visit[maxsize][maxsize][maxsize];

int stepmethod[6][3] = ,,,,,};//每乙個點都有六種走法

int a,b,c;

struct node;

bool istrue(int m, int n)else

}int bfs()

for(int i = 0; i < 6; i++)}}

return inf;

}int main()}}

if(maze[0][0][0] == 1)

if(a + b + c - 3 > t)

if(maze[a-1][b-1][c-1] == 1)

step = bfs();

if(step < t)else

}return 0;

}

九度OJ題目1456 勝利大逃亡

題目描述 ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a b c的立方體,可以被表示成a個b c的矩陣,剛開始ignatius被關在 0,0,0 的位置,離開城堡的門在 a 1,b 1,c 1 的位置,現在知道魔王將在t分鐘後回...

九度 1456 《勝利大逃亡》

定義 map mark 佇列q 節點node int bfs 引數 return 結果不存在時的結果 初始化起點資訊 mark標記為true 處理起點資訊 入隊 九度 1456 bfs 迷宮類bfs include include define size 55 using namespace std...

題目1456 勝利大逃亡

題目1456 勝利大逃亡 時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 2919 解決 1049 題目描述 ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a b c的立方體,可以被表示成a個b c的矩陣,剛開始ig...