ignatius再次被魔王抓走了(搞不懂他咋這麼討魔王喜歡)……
output
針對每組測試資料,如果可以成功逃亡,請輸出需要多少分鐘才能離開,如果不能則輸出-1。
sample input
4 5 17
@a.b.
a*..
…^c…b
4 5 16
@a.b.
a*..
…^c…b
sample output
16-1
**
#include#include#include#include#include#include#include#includeusing namespace std;
int n,m,t; //題目給定的 3個 變數
struct point
point()
};char maze[25][25]; //字元型陣列記錄位置的座標
bool vis[25][25][1<<11]; //1<<11是將有沒有鑰匙的狀態壓縮為乙個整型,因為電腦中資料為二進位制 ,01可以表示不同狀態
int dx[4]=;
int dy[4]=; //用 2個 數 組可以表示上下左右移動
int bfs(point start,point end)
else
if(maze[x][y]>='a'&&maze[x][y]<='j')}
else }
} }return -1;
}int main()
} point s,e;
for(int i=1;i<=n;i++)
if(maze[i][j]=='^')
} }int ans=bfs(s,e); //深搜
if(ans==-1||ans>=t) cout<<-1
}
hdu1429 勝利大逃亡 續 (廣搜 狀態壓縮)
是廣搜 狀態壓縮,狀態壓縮就是vis陣列加了乙個狀態表示這個狀態時來過沒,由二進位制01所代表的整數來表示,而狀態的表示由目前所擁有的鑰匙決定,這樣很容易就可以知道,遇到路就步數加一,狀態不變遇到鑰匙就改變狀態,遇到門就 一下看看有沒有鑰匙。自己要注意的是 想當然了,用了 include inclu...
B 勝利大逃亡 續 bfs,狀態壓縮)
ignatius再次被魔王抓走了 搞不懂他咋這麼討魔王喜歡 這次魔王汲取了上次的教訓,把ignatius關在乙個n m的地牢裡,並在地牢的某些地方安裝了帶鎖的門,鑰匙藏在地牢另外的某些地方。剛開始ignatius被關在 sx,sy 的位置,離開地牢的門在 ex,ey 的位置。ignatius每分鐘只...
勝利大逃亡 深搜加剪枝
ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a b c的立方體,可以被表示成a個b c的矩陣,剛開始ignatius被關在 0,0,0 的位置,離開城堡的門在 a 1,b 1,c 1 的位置,現在知道魔王將在t分鐘後回到城堡,i...