题目链接

思路

因为新拿到一把钥匙所以相同位置可以重复走,一共10把钥匙二进制表示拿到的钥匙,判断下个位置是否可以走。

#include <bits/stdc++.h>
const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
using namespace std;
char g[25][25];
int sx, sy, ex, ey;
int n, m, t;
int vis[25][25][1<<10];
int d[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
struct ac{int x, y, c, key;
};
int check(int x, int y) {if (x < 0 || y < 0 || x >= n || y >= m || g[x][y] == '*') return 1;return 0;
}
int bfs() {queue<ac> que;memset(vis, 0, sizeof(vis));que.push({sx, sy, 0, 0});vis[sx][sy][0] = 1;while (!que.empty()) {ac f = que.front();que.pop();int dx, dy;for (int i = 0; i < 4; ++i) {int key = f.key;dx = f.x + d[i][0];dy = f.y + d[i][1];if (check(dx, dy) || vis[dx][dy][key]) continue;vis[dx][dy][key] = 1;if (g[dx][dy] >= 'A' && g[dx][dy] <= 'J' && (key >> (g[dx][dy]-'A')) % 2 == 0) continue;if (g[dx][dy] >= 'a' && g[dx][dy] <= 'j') key |= 1 << (g[dx][dy] - 'a');if (g[dx][dy] == '^') return f.c+1 < t ? f.c+1 : -1;vis[dx][dy][key] = 1;que.push({dx, dy, f.c+1, key});}}return -1;
}
int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);while (scanf("%d %d %d", &n, &m, &t) != EOF) {for (int i = 0; i < n; ++i) scanf("%s", g[i]);for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (g[i][j] == '@') sx = i, sy = j;}}int ans = bfs();printf("%d\n", ans);}return 0;
}

HDU - 1429 胜利大逃亡(续) (BFS+状压)相关推荐

  1. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  2. hdu 1429 胜利大逃亡(续) bfs+状态压缩

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. HDU 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  4. hdu 1429 胜利大逃亡(续)

    状态压缩+宽搜 #include<cstdio> #include<iostream> #include<cstring> #include<queue> ...

  5. BFS——1429 胜利大逃亡(续)

    1429 胜利大逃亡(续) 文章目录 1429 胜利大逃亡(续) 题意: 思路: 本题的重点在于标记数组,除了基本的坐标 ( x , y ) (x,y) (x,y)以外,在同一位置是否有某个钥匙显然会 ...

  6. hdu 杭电1429 胜利大逃亡(续)

    题目表述 Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)-- 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些 ...

  7. hdu 1253 胜利大逃亡(BFS)

    题目链接:点击链接 三维的BFS,刚开始一直超内存,超无语......  改了n多次终于AC了 #include <iostream> #include <stdio.h> # ...

  8. HDOJ1429(胜利大逃亡(续))

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. HDU-1429 胜利大逃亡(续)

    A - 胜利大逃亡(续) Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

最新文章

  1. RPi 2B UART作为调试口或者普通串口
  2. XAML特殊字符 (转)
  3. 旷视《人工智能应用准则》全文公布 提倡善用AI技术
  4. Springboot简单应用
  5. 2018年编程语言排行榜_这是2018年学习的最佳编程语言
  6. window下tomcat 按天生成日志_Tomcat原理(一)
  7. 在Ubuntu和Linux 中安装虚拟机以及安装Windows 10
  8. 【Proteus仿真】L297驱动步进电机
  9. 一文了解推挽输出结构Output_push_pull
  10. 开源分布式定时任务框架技术选型
  11. ubuntu-Errors were encountered while processing
  12. ESN(Electronic Serial Number,电子序列号)简介
  13. Amlogic 4K UI显示
  14. NCBI上基因前面有个accession(编号)分别有NC是什么意思
  15. MQTT网关连接阿里云平台案例教程
  16. 机器学习-预剪枝和后剪枝
  17. [GXYCTF2019]禁止套娃--详解
  18. 腾讯大咖分享 | 腾讯Alluxio(DOP)在金融场景的落地与优化实践
  19. 最强的数据扩增方法竟然是添加标点符号?
  20. java编写的atm机项目结题报告_《计算机学院视频教程网站的创建》教学研究项目结题报告.pdf...

热门文章

  1. Python学习之路day03——010函数(类似Java中的方法)
  2. Linux 配置jdk
  3. Kotlin when 流程判断
  4. Day3-----delayPrompt
  5. 《三基色组成方式》转
  6. 点击弹出窗口外任意地方关闭弹出窗口
  7. 【数据结构与算法】之深入解析“插入区间”的求解思路与算法示例
  8. 【数据结构与算法】之双向链表的创建/遍历/插入/删除/查找的算法实现
  9. LeetCode Algorithm 217. 存在重复元素
  10. 教小学妹学算法:诺基亚引出的动态规划问题