Maze
题目链接:
BFS+状态压缩
把身上携带钥匙的状态压缩成一个2^10的整数。这道题难在如何表示墙和门所在的位置,我是另开了个两个N*N的数组mp_r[N][N],mp_c[N][N]分别以行和列错位存储存储墙和门的位置(mp_r[i][j]表示第r行j列和第r行j+1列的墙的状态),其他人好像是用mp[N][N][4]来存储墙和门的状态的,突然觉得我好蠢...这题坑点是一个位置可以存多把钥匙(吐血 怪不得这么多次都是WA)= =
代码如下:
1 #include2 #include 3 #include 4 #define LL long long 5 #define N 55 6 using namespace std; 7 struct node{ 8 LL x,y,time; 9 bool key[10]; 10 }; 11 node s,e; 12 LL mp_r[N][N]; 13 LL mp_c[N][N]; 14 LL key[N][N][10]; 15 LL n,m,p; 16 bool mark[1024][N][N]; 17 bool flag; 18 LL dx[]={-1,1,0,0}; 19 LL dy[]={ 0,0,-1,1}; 20 LL zip(node t){ 21 LL code=0; 22 for(LL i=0;i que; 57 que.push(s); 58 while(!que.empty()){ 59 node t=que.front(); 60 que.pop(); 61 if(t.x==e.x&&t.y==e.y){ 62 e.time=t.time; 63 flag=1; 64 break; 65 } 66 for(LL i=0;i<4;++i){ 67 LL x=t.x+dx[i]; 68 LL y=t.y+dy[i]; 69 if(1<=x&&x<=n&&1<=y&&y<=m){ 70 node temp; 71 temp.x=x,temp.y=y,temp.time=t.time+1; 72 for(LL j=0;j