hdu4771 水搜索(状态压缩+bfs)
题意:
给你一个n*m的地图,问你从起点出发,吧所有的宝藏都捡完用的最少时间。
思路:k <= 4,水题,直接开一个数组mark[now][x][y];now代表的是当前检宝藏的二进制压缩状态,然后就直接搜索就行了。
- #include<stdio.h>
- #include<string.h>
- #include<queue>
- #define N 100 + 5
- using namespace std;
- typedef struct
- {
- int x ,y ,now;
- }NODE;
- NODE xin ,tou;
- int mark[1<<4][N][N];
- int map[N][N];
- int dir[4][2] = {0 ,1 ,0 ,-1 ,1 ,0 ,-1 ,0};
- NODE K[5];
- int n ,m ,k;
- bool ok(int x ,int y ,int now)
- {
- return x <= n && x >= 1 && y <= m && y >= 1 && !mark[now][x][y] && map[x][y];
- }
- int BFS(int sx ,int sy)
- {
- queue<NODE>q;
- xin.x = sx ,xin.y = sy ,xin.now = 0;
- int mk = 0;
- for(int i = 1 ;i <= k ;i ++)
- if(xin.x == K[i].x && xin.y == K[i].y)
- {
- mk = i;
- break;
- }
- if(mk) xin.now = 0 | (1 << (mk - 1));
- memset(mark ,0 ,sizeof(mark));
- q.push(xin);
- mark[xin.now][xin.x][xin.y] = 1;
- while(!q.empty())
- {
- tou = q.front();
- q.pop();
- if(tou.now == (1<<k) - 1)
- return mark[tou.now][tou.x][tou.y] - 1;
- for(int i = 0 ;i < 4 ;i ++)
- {
- xin.x = tou.x + dir[i][0];
- xin.y = tou.y + dir[i][1];
- xin.now = tou.now;
- int mk = 0;
- for(int j = 1 ;j <= k ;j ++)
- if(xin.x == K[j].x && xin.y == K[j].y)
- {
- mk = j;
- break;
- }
- if(mk) xin.now = tou.now | (1<<(mk - 1));
- if(ok(xin.x ,xin.y ,xin.now))
- {
- mark[xin.now][xin.x][xin.y] = mark[tou.now][tou.x][tou.y] + 1;
- q.push(xin);
- }
- }
- }
- return -1;
- }
- int main ()
- {
- int i ,j ,sx ,sy;
- char str[N];
- while(~scanf("%d %d" ,&n ,&m) && n + m)
- {
- for(i = 1 ;i <= n ;i ++)
- {
- scanf("%s" ,str);
- for(j = 1 ;j <= m ;j ++)
- {
- if(str[j-1] == '@')
- map[i][j] = 1 ,sx = i ,sy = j;
- if(str[j-1] == '.') map[i][j] = 1;
- if(str[j-1] == '#') map[i][j] = 0;
- }
- }
- scanf("%d" ,&k);
- for(i = 1 ;i <= k ;i ++)
- scanf("%d %d" ,&K[i].x ,&K[i].y);
- printf("%d\n" ,BFS(sx ,sy));
- }
- return 0;
- }
hdu4771 水搜索(状态压缩+bfs)的更多相关文章
- POJ 2046 Gap 搜索- 状态压缩
题目地址: http://poj.org/problem?id=2046 一道搜索状态压缩的题目,关键是怎样hash. AC代码: #include <iostream> #include ...
- 胜利大逃亡(续)(状态压缩bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 【HDU - 1429】胜利大逃亡(续) (高级搜索)【状态压缩+BFS】
Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方.刚开 ...
- hdu4845 状态压缩BFS
题意: 给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路: ...
- hdu 3681 Prison Break(状态压缩+bfs)
Problem Description Rompire . Now it’s time to escape, but Micheal# needs an optimal plan and he con ...
- POJ 1753 Flip Game (状态压缩 bfs+位运算)
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...
- HDU 5025 Saving Tang Monk 【状态压缩BFS】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5025 Saving Tang Monk Time Limit: 2000/1000 MS (Java/O ...
- POJ - 1324 Holedox Moving (状态压缩+BFS/A*)
题目链接 有一个n*m(1<=n,m<=20)的网格图,图中有k堵墙和有一条长度为L(L<=8)的蛇,蛇在移动的过程中不能碰到自己的身体.求蛇移动到点(1,1)所需的最小步数. 显然 ...
- POJ 3411 Paid Roads (状态压缩+BFS)
题意:有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱, 如果没有去过就付R的钱.求的是最少要花 ...
- 「hdu 4845 」拯救大兵瑞恩 [CTSC 1999](状态压缩bfs & 分层图思想)
首先关于分层图思想详见2004的这个论文 https://wenku.baidu.com/view/dc57f205cc175527072208ad.html 这道题可以用状态压缩,我们对于每一把钥匙 ...
随机推荐
- kubernets资源预留
一. Kubelet Node Allocatable Kubelet Node Allocatable用来为Kube组件和System进程预留资源,从而保证当节点出现满负荷时也能保证Kube和Sy ...
- CSV 注入实战
oxo1 前言 之前看到过 CSV 注入的文章,具体想了解的请搜索学习,这里不多作介绍.今天刚好碰到了导出功能,就随手测试一波,没想到还真的存在 CSV 注入漏洞. oxo2 经过 1.测试漏洞 看到 ...
- FreeBSD 如何安装软件
1:概括FreeBSD捆绑了丰富的系统工具集合作为基础系统的一部分.此外,FreeBSD提供了两种用于安装第三方软件的补充技术:FreeBSD Ports Collection,用于从源代码安装,以及 ...
- The Red Button
The Red Button 问题 问题描述 Piegirl终于发现了红色按钮,你现在还剩最后一个机会去改变这个结局.这个按钮下面的电路由n个从0到n-1编号节点组成.为了关闭这个按钮,这n个节点必须 ...
- python爬取考研专业信息
伴随着2021考研成绩的公布,2021考研国家线也即将到来.大家是否有过考研的想法了?如果想考研我们就需要了解很多的信息,但是百度的上有太多信息需要我们去一一的鉴别,是比较浪费时间的.所以我们可以学习 ...
- Poj3660(floyd)
题目传送门 题意:编号为1-N的奶牛参加比赛,告诉我们m场比赛结果试问有几头奶牛的排名可以确定. 题解:其实就是一个传递闭包的模板题,用Floyd把所有有联系的比赛结果串在一起. Ac 代码: #in ...
- windows使用vscode设置免密登录linux服务器
秘钥原理解释 id_rsa.pub是公钥,部署在服务器上 id_rsa是私钥,放在windows本地 本质上它们都是个文本文件 操作流程 生成秘钥对(windows和linux均可) ssh-keyg ...
- linux screen的用法
今天使用vps时,起了一个http服务,因为需要用nc接收流量,就要关闭http服务,再去用nc接收流量就接收不到,请教了师傅,这里需要用到screen创建一个会话,就能http服务跟nc同时进行. ...
- go中semaphore(信号量)源码解读
运行时信号量机制 semaphore 前言 作用是什么 几个主要的方法 如何实现 sudog 缓存 acquireSudog releaseSudog semaphore poll_runtime_S ...
- Linux 服务器性能测试报告-sysbench命令实践
Linux 服务器性能测试报告 我们使用linux 工具sysbench 来测试linux服务器性能,目前在Centos上进行操作 Install sysbench yum -y install sy ...