因為總共a-j有10種鑰匙,所以可以把有沒有鑰匙的狀態壓到乙個int數里,然後dfs。
昨天狀態特別不好寫超時了好幾次,但是這個題很簡單的,算是水題。
**
1 #include2 #include3 #include4 #include5 #include6 #include7view codeusing
namespace
std;
8const
int maxn=200000;9
const
double eps=1e-8;10
const
int modn=998244353;11
int vis[21][21][1
<<11]={};
12char a[21][21]={};
13int id1[4]=;int id2[4]=;
14int
m,n,t;
15struct
nod;
18 queueq;
19int bfs(int xi,int
yi)23 nod c; int
i,j,ff,ff1;
24 c.x=xi,c.y=yi,c.k=0,c.t=0
;25 vis[xi][yi][0]=1;26
q.push(c);
27while(!q.empty())
34for(int zz=0;zz<4;zz++)b.k=c.k;
39if(a[i][j]=='^'
)42if(a[i][j]>='
a'&&a[i][j]<='z'
)47}48
if(a[i][j]>='
a'&&a[i][j]<='z'
)52}53
if(a[i][j]=='
.'&&!vis[i][j][b.k])58}
59}60return -1;61
}62intmain()72}
73}74 printf("
%d\n
",bfs(x,y));75}
76 }
HDU 1429 勝利大逃亡 續 (狀壓bfs)
與其他bfs不同的是這種題需要用二進位制來儲存鑰匙這個狀態,需要多用一維陣列來儲存。可以通過位運算 拾取鑰匙 匹配鑰匙 include string include iostream include cstdio include cmath include set include queue inc...
hdu 1429 勝利大逃亡 續 BFS狀壓
題目連線 題意 迷宮的加強版,迷宮裡有鑰匙和門,問在指定的時間下能否逃出 題解 用二進位制位來記錄是否有該門的鑰匙,然後上bfs include include include define ffc i,a,b for int i a i b i using namespace std int n,...
HDU1429 勝利大逃亡 續
學習位壓縮很好的一道題,因為只有10把鑰匙,那麼可以把10鑰匙壓縮二進位制,比如1000就表示身上只要第4把鑰匙的狀態,110表示帶有第2把和第3把鑰匙,那麼要判斷當前的鑰匙串有沒有能開啟當前門鑰匙,那麼就只要乙個 運算就可以,因為11101110 00100000 00100000 這樣就說明那一...