HDU 1429
来源:互联网 发布:神州科捷工作知乎 编辑:程序博客网 时间:2024/06/01 08:12
终于过了这道题
做的第一道位压缩
http://acm.hdu.edu.cn/showproblem.php?pid=1429
#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#include<algorithm>#include<vector>#include<string.h>#include<queue>#include<malloc.h>using namespace std;int n, m, t;int ans,num;char s[22];int sx, sy;int dir[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };//四个方向int vis[22][22][1025];struct Q{ int x; int y; char ele; int step; int nkeys;}p[22][22];int check(int x, int y){ if (x>=0 && x<n && y>=0 && y<m) return 1; else return 0;}void bfs(){ memset(vis,0,sizeof(vis)); queue <Q> q; Q qq, qqq; p[sx][sy].step = 0; p[sx][sy].nkeys = 0; vis[sx][sy][p[sx][sy].nkeys] = 1; q.push(p[sx][sy]); while (!q.empty()) { qq = q.front(); q.pop(); if (p[qq.x][qq.y].ele == '^' && qq.step < t) { printf("%d\n",qq.step); return ; } else if ( p[qq.x][qq.y].ele == '^' && qq.step >= t ) { printf("-1\n"); return ; } for (int i = 0; i < 4;i++) { int x = qq.x+dir[i][0]; int y = qq.y+dir[i][1]; qqq = qq; qqq.x = x; qqq.y = y; if ( check(qqq.x, qqq.y) && p[qqq.x][qqq.y].ele != '*' && !vis[qqq.x][qqq.y][qqq.nkeys]) { if (p[qqq.x][qqq.y].ele >= 'a' && p[qqq.x][qqq.y].ele <= 'j' ) { int key = 1 << (p[qqq.x][qqq.y].ele - 'a'); qqq.nkeys |= key;//拾取钥匙 if (!vis[qqq.x][qqq.y][qqq.nkeys]) { qqq.step += 1; vis[qqq.x][qqq.y][qqq.nkeys] = 1; q.push(qqq); } } else if (p[qqq.x][qqq.y].ele >= 'A' && p[qqq.x][qqq.y].ele <= 'J' ) { int key = 1 << (p[qqq.x][qqq.y].ele - 'A'); if ( (qqq.nkeys & key) )//检查手头是否有该门的钥匙 { qqq.step += 1; vis[qqq.x][qqq.y][qqq.nkeys] = 1; q.push(qqq); } } else { qqq.step += 1; vis[qqq.x][qqq.y][qqq.nkeys] = 1; q.push(qqq); } } } } printf("-1\n"); return;}int main(){ while (scanf("%d %d %d", &n, &m, &t) != EOF) { num = 0; sx = sy = 0; for (int i = 0; i < n; i++) { scanf("%s",s); for (int j = 0; j < m; j++) { p[i][j].ele = s[j]; p[i][j].step = 0 ; p[i][j].nkeys = 0 ; p[i][j].x = i; p[i][j].y = j; if (p[i][j].ele == '@') { sx = i; sy = j; } } } bfs(); } return 0;}
0 0
- HDU 1429
- hdu 1429
- hdu 1429
- HDU 1429
- hdu 1429
- HDU 1429
- HDU-1429
- hdu 1429
- hdu 1429
- HDU 1429
- HDU 1429(BFS )
- hdu 1429搜索
- HDU 1429 搜索
- HDU 1429 BFS
- hdu 1429 状压bfs
- HDU 1429 BFS + 状压
- hdu 1429 状态搜索
- HDU 1429(状压+bfs)
- [统计学习方法]K近邻法
- 《数据结构》实验三: 栈和队列实验
- 安卓编译工具
- MDK和IAR环境仿真时,当全速运行的时候如何查看全局变量的值
- Centos java版本变更
- HDU 1429
- Android - ImageButton单击切换按钮图片效果的实现
- POJ 1704-Georgia and Bob(阶梯博弈)
- C++STL模板容器(三)
- 测试CSDN的code
- 也说alsa音乐播放(mp3文件从零开始)
- C++STL模板容器(四)
- java构造器
- What qualities characrize a *great* PHD student