原文链接: HDU 1429 bfs 状态压缩

上一篇: HDU 4771 Stealing Harry Potter's Precious

下一篇: HDU 1427 dfs 速算24点

题意:迷宫中,一个起点,一个终点,迷宫中有墙,有门,门的钥匙也在迷宫中某处,只有拿到钥匙才能打开门,问能不能再T步(不含)之内逃出迷宫。

题解:在朴素BFS上增加了钥匙的状态,只有有钥匙才能打开门,总共有不超过10吧钥匙,所以用一个int的整数的二进制即可存储钥匙的状态。碰到门先判断状态,碰到钥匙更新状态

字符串后面有\n,最大长度是21

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>#define LL long long
int const MAX = 1e6 + 1;
int const INF = 1 << 30;
double const EPS = 0.00000001;
using namespace std;char g[21][21];
int n, m, T;
bool vis[20][20][1 << 10];
int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};struct Node {int x, y, state, step;
};
Node st, t;void setVis(Node &nd){vis[nd.x][nd.y][nd.state] = 1;
}int bfs(){memset(vis, 0, sizeof(vis));queue<Node> q;q.push(st);setVis(st);while (!q.empty()){Node nd = q.front();q.pop();for (int i = 0; i < 4; i++){t.x = nd.x + dir[i][0], t.y = nd.y + dir[i][1];t.step = nd.step + 1, t.state = nd.state;//只将满足条件的加入队列if (t.x < 0 || t.y < 0 || t.x >= n || t.y >= m ||g[t.x][t.y] == '*' || t.step >= T)continue;char c = g[t.x][t.y];if (c == '^'){return t.step;}//如果是门且没有对应的钥匙if (c >= 'A' && c <= 'J' && !(t.state & (1 << (c - 'A'))))continue;//如果是钥匙,更新状态if (c >= 'a' && c <= 'j')t.state |= (1 << (c - 'a'));if (!vis[t.x][t.y][t.state]){q.push(t);setVis(t);}}}return -1;
}
int main(){freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);while (scanf("%d%d%d", &n, &m, &T) == 3){for (int i = 0; i < n; i++){scanf("%s", g[i]);for (int j = 0; j < m; j++)if (g[i][j] == '@')st.x = i, st.y = j, st.step = 0, st.state = 0;}printf("%d\n", bfs());}return 0;
}

HDU 1429 bfs 状态压缩相关推荐

  1. BFS+状态压缩 hdu-1885-Key Task

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1885 题目意思: 给一个矩阵,给一个起点多个终点,有些点有墙不能通过,有些点的位置有门,需要拿到相应 ...

  2. csu 1536 Bit String Reordering(模拟 bfs+状态压缩)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1536 题意: 输入n个只为 0或1 的数 形成一个排列 再输入m个数 每个数代表 目标排列 (样例 ...

  3. BFS + 状态压缩总结

    BFS + 状态压缩使用条件 求最短路径时,一般来说会优先考虑使用BFS算法.BFS算法在广度优先搜索的过程中会有一个类似vis的数组去重,避免重复访问 但是在一些情况下,题目需要求最短路径的同时,有 ...

  4. nyist 999 师傅又被妖怪抓走了 【双广搜 || BFS +状态压缩】

    题目:nyist 999 师傅又被妖怪抓走了 分析:在一个图中只要看到D点和E点就行的最小步数,看到的定义是:也就是说两个人在同一行或者同一列,并且中间没有障碍物或者没有其他人就可以看到对方. 所以可 ...

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

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

  6. poj 1324(BFS+状态压缩)

    解题思路:这道题一开始的想法就是状态压缩,即考虑如何判重,由于蛇并非是直线的,所以想到了以每一个点的上下左右共四个 值来表示相对位置.最开始想如何用四进制来表示它,无语.....还是题目做少了,直接用 ...

  7. 2021-08-06 leetcode每日一题 BFS+状态压缩,无向图的

    访问所有节点的最短路径 存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号. 给你一个数组 graph 表示这个图.其中,graph[i] 是一个列表,由所有与节点 i ...

  8. hdu 3006(状态压缩)

    题意:给一些集合,取一部分集合合并能够得到多少个新集合. 解题思路:这道题数字最多只有14,可以用状态压缩去做,每一位代表某个数,0代表不取,1代表取这个数.剩下的就是去模拟状态了.不多讲,输入状态压 ...

  9. hdu 5418(状态压缩dp+Floyd)

    点击打开链接 解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次.... 这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费 ...

  10. HDU1429胜利大逃亡(续)HDU 1885 Key Task BFS+状态压缩+水

    HDU1429 只有10把钥匙 1<<10足够了 标记用三维数组 用Linux好不习惯 继续克服- #include <stdio.h> #include <string ...

最新文章

  1. 这些 Shell 分析服务器日志命令集锦,收藏好
  2. IBM Watson将成为失败的投资?分析师眼里, IBM AI过度乐观, 夸大宣传
  3. DHTML【2】--HTML
  4. Flex 中的 RSL
  5. iphone开发中的一些小技
  6. 计算机无法检测电池损耗怎么办,笔记本电脑无法充电怎么办?笔记本电池损耗如何修复?...
  7. JS 中判断一个对象是否为数组对象?
  8. 微型计算机的使用寿命,微型计算机使用注意事项及保养的一般方法
  9. 前端实现3d效果_前端动画效果实现的简单比较
  10. springcloud工作笔记100---@PostConstruct注解的作用
  11. 【Vue】—异步组件
  12. 单片机重要组成部分还有什么,引脚封装分布知识讲解(一)
  13. 上网行为管理网络分析系统
  14. 虚拟机网卡和linux bridge上tap设备的关系
  15. 如何交叉编译fio并移植到ARM、IOT上
  16. 调侃计算机专业的笑话,段子手要失业了 计算机也懂幽默
  17. Et aliquam sunt quasi harum unde.Deserunt impediSofort wohnen früh aus t quidem vel dolorum ducimus.
  18. office 2019 安装教程(图解版)
  19. 历届试题 合根植物 C语言,植物营养历年真题(整理).doc
  20. c语言零基础入门(完整版)

热门文章

  1. oracle卸载ogg,Oracle GoldenGate(ogg)安装经验大汇总,采坑总结,绝对干货!
  2. 【51单片机】 蜂鸣器发声程序
  3. 量子计算机的算力是多少,量子计算机算力有多强?可能是无数平行宇宙中的计算机在同时计算...
  4. ueditor 图片水印 php,[UEditor]上传图片自动添加水印
  5. MFC模态对话框和非模态对话框使用
  6. 二进制计算机课教案,《二进制与计算机》教学设计
  7. linux鼠标手势软件,linux 系统中全能的鼠标手势——easystroke
  8. 这一年很幸运,平平淡淡的|2021 年度总结
  9. ckeditor java 取值_Jquery 对Ckeditor 取值
  10. python计算三角形斜边上的中线_直角三角形斜边上的中线的性质及其应用