hdu1429(bfs 狀態壓縮)

2022-04-28 14:54:14 字數 653 閱讀 1175

思路:有十個門,有十把鑰匙,每把鑰匙對應乙個門,相同的門可以有多個。這樣,我們就得按照狀態來搜尋,用0000000001代表第乙個門有鑰匙了,1000000000代表第十個門鑰匙有了.......一次類推,可以用二進位制來表示.......遇到鑰匙,可以先拾起這個鑰匙,用|;遇到門,可以判斷是否有這個門的鑰匙,把門狀態位移後,&就好........

#include#include#include#includeusing namespace std;

int t[4][2]=,vist[25][25][5000];

char str[25][25];

int n,m,tj,flag=0,ans=0;

int qx,qy,zx,zy;

struct node

;void bfs()

for(int i=0;i<4;i++)

if(str[i][j]=='^')

}flag=0;

ans=0;

memset(vist,0,sizeof(vist));

bfs();

if(flag==0)

printf("-1\n");

else

printf("%d\n",ans);

}return 0;

}

hdu 1429 bfs 狀態壓縮

開乙個三維標記陣列,標記ignatius有沒有以拿到鑰匙的狀態到達該位置 由於鑰匙的個數最多十個,所以可以用狀態壓縮來做 用1和0表示有沒有第i種鑰匙,這樣對於這個人拿到的鑰匙狀態就可以用二進位制數表示 用bfs找到最小值 include include include include using ...

Hdu 1429(狀態壓縮)

有鑰匙和門的 bfs 狀態壓縮 乙個十把鑰匙和鎖,分別為a,b.j 當所用的步數小於 t即可。include include include includeusing namespace std int n,m,t,ans char map 21 21 int dir 4 2 int vis 21 ...

hdu1429勝利大逃亡 續 bfs 狀態壓縮

原先打算用乙個class裡面的set 儲存鑰匙,每次遇上門,就看當前結點的set有沒有對應的key 每次遇上鑰匙就將鑰匙插入的這個節點中,同時還要將父節點的鑰匙插入這個節點中,顯然這樣子很花費時間 於是考慮狀態壓縮,問題是怎麼壓縮?比如怎麼用二進位制儲存鑰匙 當走到 xx,yy 時 首先明確鑰匙只有...