[HDU]5094Maze(状态压缩BFS)
来源:互联网 发布:淘宝上哪家大码女装好 编辑:程序博客网 时间:2024/05/18 15:04
状态压缩的题,第一次WA了,怎么改都不对,交了十几遍,之后重新写了一个,1A了
#include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;const int maxn = 51;const int dir[4][2] = {{0,1},{-1,0},{0,-1},{1,0}};int n,m,t;int door[maxn][maxn][4];int key[maxn][maxn];int vis[maxn][maxn][(1 << 11)];struct St{ int x,y,key,step;}now;void init(){ memset(key,0,sizeof(key)); memset(door,-1,sizeof(door));//-1代表可以任意的通过 memset(vis,0,sizeof(vis));}void add_door(int x1,int y1,int x2,int y2,int op){ if(x1 == x2){ if(y1 > y2){ door[x1][y1][2] = (1 << op); door[x2][y2][0] = (1 << op); } else{ door[x1][y1][0] = (1 << op); door[x2][y2][2] = (1 << op); } } else{ if(x1 > x2){ door[x1][y1][1] = (1 << op); door[x2][y2][3] = (1 << op); } else{ door[x1][y1][3] = (1 << op); door[x2][y2][1] = (1 << op); } }}bool judge(int d){ if(door[now.x][now.y][d] == -1) return true; //可以直接通过 if(door[now.x][now.y][d] == 1) return false; //是一面墙 int op = door[now.x][now.y][d]&now.key; if(!op) return false; return true;}void dfs(){ now.x = 1; now.y = 1; now.key = key[1][1]; now.step = 0; vis[now.x][now.y][now.key] = 1; queue<St>q; while(!q.empty()) q.pop(); q.push(now); while(!q.empty()){ now = q.front(); q.pop(); //printf("%d %d\n",now.x,now.y);; if(now.x == n && now.y == m){ printf("%d\n",now.step); return; } for(int d = 0; d < 4; d++){ int x = now.x + dir[d][0]; int y = now.y + dir[d][1]; if(x >= 1 && x <= n && y >= 1 && y <= m){ if(!judge(d)) continue; int c_key = now.key|key[x][y]; if(!vis[x][y][c_key]){ St temp; temp.x = x; temp.y = y; temp.key = c_key; temp.step = now.step + 1; q.push(temp); vis[x][y][c_key] = 1; } } } } printf("-1\n");}int main(){ while(scanf("%d%d%d",&n,&m,&t) != EOF){ int a,b; init(); scanf("%d",&a); for(int i = 0; i < a; i++){ int x1,y1,x2,y2,op; scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&op); add_door(x1,y1,x2,y2,op); } scanf("%d",&b); for(int i = 0; i < b; i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); key[x][y] |= (1 << z); //一个坐标的钥匙,状态压缩 } dfs(); } return 0;}
0 0
- hdu 5094 Maze (bfs+状态压缩)
- [HDU]5094Maze(状态压缩BFS)
- HDU 5094 Maze(BFS、状态压缩)
- hdu 5094 Maze bfs+状态压缩
- HDU 5094 --Maze【BFS && 状态压缩】
- hdu 5091 Maze (bfs+状态压缩)
- HDOJ 5094 Maze 【状态压缩+BFS】
- hdoj 5094 Maze 【BFS + 状态压缩】 【好多坑】
- Maze zoj3652(bfs+记忆化+状态压缩)
- zoj 3652 ZOJ 3652 MAZE(BFS+状态压缩)
- CodeForces 197D Infinite Maze (BFS+状态压缩)
- hdu 5094 Maze bfs
- hdu 5094 Maze(BFS)
- Hdu 5094 Maze(状压dp+bfs)
- hdu 1429 (bfs+状态压缩)
- HDU 1429 (BFS+状态压缩)
- hdu 1429 BFS+状态压缩
- hdu 2209 BFS + 状态压缩
- Java编程笔记之网络编程2
- ffmpeg 拼接文件
- SQL基础概述
- 详解(安卓) 4.0 UI设计规范
- hdu 5101 Select(树状数组)
- [HDU]5094Maze(状态压缩BFS)
- STM32控制直流电机笔记(二)——编程注意事项
- hdu 5101 select
- 程序猿之--C语言细节15(预处理命令细节#error、运算符#和##、__FILE__、__LINE__)
- tmux常用快捷键
- 多线程之同步Synchronized
- Win8.1 图标错乱解决方法
- 【笔记】机器学习基石(一) the learning problem
- hadoop中的文件接口类-- SequenceFile