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)相关推荐
- hdu4845 状态压缩BFS
题意: 给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路: ...
- hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
貌似和前段时间的一场网络赛一个类型,状态压缩判断走没走过,然后裸bfs到终点. 其实这类题目很简单就是一个bfs模板,无非就是有一些坑,比如这一题..一个格子可以有多把钥匙汗== 1 #include ...
- CodeForces 906C(状态压缩 +BFS)
题目链接 题意:某人举办了一个party,邀请了他的朋友来,他的朋友也邀请了他们的朋友.etc.然后某人并不认识他朋友的朋友,这样聊天很尬,所以就让邀请他不认识的人的朋友给某人介绍.假设通过朋友C介绍 ...
- 【算法练习】动态规划/搜索/状态压缩 百练poj4124:海贼王之伟大航路
参考链接:https://www.twblogs.net/a/5b8ceaac2b7177188336e93d/zh-cn 题目链接:http://bailian.openjudge.cn/pract ...
- noi 7221 拯救公主 (状态压缩+bfs)
/* 这题实在调糊了 借鉴的题解的一些判断方法 位运算大法好 - - 因为要集齐所有的宝石所以状态压缩一下 f[i][j][s]将s化为二进制 每一0表示该宝石没有 1表示该宝石有 有:到(i,j)这 ...
- POJ 1753 Flip Game (黑白棋) (状态压缩+BFS)
题目大意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色.游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,游戏就完 ...
- SP11469 SUBSET - Balanced Cow Subsets(折半搜索+状态压缩)难度⭐⭐⭐⭐★
题目链接 SP11469 SUBSET - Balanced Cow Subsets 题目翻译 给出N(1≤N≤20)N(1≤N≤20)N(1≤N≤20)个数M(i)(1<=M(i)<=1 ...
- J - 最强王者 POJ - 1753 Flip Game 搜索+状态压缩
J - 最强王者 POJ - 1753 Flip game is played on a rectangular 4x4 field with two-sided pieces placed on e ...
- 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路
原文地址:http://www.cnblogs.com/GXZlegend/p/6825226.html 题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串 ...
最新文章
- java Executor实例_Executor框架+实例
- TCP/IP详解--第七章
- Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记
- OpenCASCADE:读IGES
- Beta 冲刺 (2/7)
- LeetCode每日打卡 - 汉明距离
- python 命令行解析模块_Python解析命令行读取参数 -- argparse模块
- npm收录了哪些包_手把手教你制作一个小而美丽的 npm 包并发布
- 负离子程序员的一组未来手绘,酷毙了
- autocad.net QQ群:193522571 判断string中是否包含集合中所有的字符串
- type=file的未选择任何文件修改_Electron应用易“招黑”,轻松被修改并植入后门...
- c++回调函数详解及实现(lambda)
- ABP框架实战 1.基础信息维护
- 多年来我的创业感悟,穷人与富人的赚钱思维模式丨国仁猫哥
- java加载so包,undefined symbol处理方法
- 【CSS—美化网页元素】
- The road to learning English-Writing
- 【资料合集】2018云栖大会•南京峰会回顾合集:PDF下载
- 扫码器.java_条码扫描器在Java上的实现
- STM32F429IGT6入门(一)