HDU1429 勝利大逃亡 狀壓bfs

2022-05-26 14:24:09 字數 1086 閱讀 2184

因為總共a-j有10種鑰匙,所以可以把有沒有鑰匙的狀態壓到乙個int數里,然後dfs。

昨天狀態特別不好寫超時了好幾次,但是這個題很簡單的,算是水題。

**

1 #include2 #include3 #include4 #include5 #include6 #include7

using

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 }

view code

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 這樣就說明那一...