hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地
貌似和前段时间的一场网络赛一个类型,状态压缩判断走没走过,然后裸bfs到终点。
其实这类题目很简单就是一个bfs模板,无非就是有一些坑,比如这一题。。一个格子可以有多把钥匙汗==
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<queue> 5 using namespace std; 6 struct dian{ 7 int x,y,state,time; 8 }; 9 int n,m; 10 int xx[]={1,-1,0,0}; 11 int yy[]={0,0,1,-1}; 12 int vis[55][55][1100]; 13 int g[55][55][55][55],num[55][55],key[55][55][55]; 14 int bfs() 15 { 16 queue<dian>q; 17 dian n1,n2; 18 int i,j,temp,x; 19 while (!q.empty()) q.pop(); 20 n1.x=1; n1.y=1; n1.time=0; x=0; 21 for (i=1;i<=num[1][1];i++) x=(x|(1<<key[1][1][i])); 22 n1.state=x; q.push(n1); vis[1][1][n1.state]=1; 23 while (!q.empty()) 24 { 25 n1=q.front(); q.pop(); 26 // printf("%d %d %d %d\n",n1.x,n1.y,n1.state,n1.time); 27 if (n1.x==n&&n1.y==m) return n1.time; 28 for (i=0;i<4;i++) 29 { 30 n2.x=n1.x+xx[i]; n2.y=n1.y+yy[i]; 31 if (n2.x<=0||n2.x>n||n2.y<=0||n2.y>m) continue; 32 if (g[n1.x][n1.y][n2.x][n2.y]!=-1){ 33 temp=(1<<g[n1.x][n1.y][n2.x][n2.y]); 34 if ((n1.state&temp)==0) continue; 35 } 36 x=n1.state; 37 for (j=1;j<=num[n2.x][n2.y];j++){ 38 temp=(1<<key[n2.x][n2.y][j]); 39 x=(x|temp); 40 } 41 n2.state=x; 42 if (vis[n2.x][n2.y][n2.state]) continue; 43 vis[n2.x][n2.y][n2.state]=1; 44 n2.time=n1.time+1; 45 q.push(n2); 46 } 47 } 48 return -1; 49 } 50 int main() 51 { 52 int p,k,i,kind,x1,x2,y1,y2,s; 53 while (~scanf("%d%d%d",&n,&m,&p)) 54 { 55 memset(g,-1,sizeof(g)); 56 memset(num,0,sizeof(num)); 57 memset(vis,0,sizeof(vis)); 58 scanf("%d",&k); 59 for (i=1;i<=k;i++) 60 { 61 scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&kind); 62 g[x1][y1][x2][y2]=kind; 63 g[x2][y2][x1][y1]=kind; 64 } 65 scanf("%d",&s); 66 for (i=1;i<=s;i++) 67 { 68 scanf("%d%d%d",&x1,&y1,&kind); 69 num[x1][y1]++; 70 key[x1][y1][num[x1][y1]]=kind; 71 } 72 printf("%d\n",bfs()); 73 } 74 return 0; 75 }
View Code
http://acm.hdu.edu.cn/showproblem.php?pid=5094
转载于:https://www.cnblogs.com/xiao-xin/articles/4069807.html
hdu5094(上海邀请赛E) 状态压缩bfs:取钥匙开门到目的地相关推荐
- hdu4845 状态压缩BFS
题意: 给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路: ...
- CodeForces 906C(状态压缩 +BFS)
题目链接 题意:某人举办了一个party,邀请了他的朋友来,他的朋友也邀请了他们的朋友.etc.然后某人并不认识他朋友的朋友,这样聊天很尬,所以就让邀请他不认识的人的朋友给某人介绍.假设通过朋友C介绍 ...
- noi 7221 拯救公主 (状态压缩+bfs)
/* 这题实在调糊了 借鉴的题解的一些判断方法 位运算大法好 - - 因为要集齐所有的宝石所以状态压缩一下 f[i][j][s]将s化为二进制 每一0表示该宝石没有 1表示该宝石有 有:到(i,j)这 ...
- POJ 1753 Flip Game (黑白棋) (状态压缩+BFS)
题目大意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色.游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,游戏就完 ...
- hdu4771 水搜索(状态压缩+bfs)
题意: 给你一个n*m的地图,问你从起点出发,吧所有的宝藏都捡完用的最少时间. 思路:k <= 4,水题,直接开一个数组mark[now][x][y];now代表的是当前检宝藏的二进制 ...
- 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路
原文地址:http://www.cnblogs.com/GXZlegend/p/6825226.html 题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串 ...
- 【HDU - 5094】 Maze (状态压缩+bfs)
题干: This story happened on the background of Star Trek. Spock, the deputy captain of Starship Enterp ...
- LeetCode 1210. 穿过迷宫的最少移动次数(状态压缩BFS)
文章目录 1. 题目 2. 解题 1. 题目 你还记得那条风靡全球的贪吃蛇吗? 我们在一个 n*n 的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格. 蛇会从左上角((0, 0) ...
- 洛谷 P2622 关灯问题II (状态压缩+BFS)
题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...
最新文章
- TestCenter中测试需求、测试用例、测试计划的评审方法
- ORACLE删除当前用户下所有的表的方法
- Java - 用数组求出斐波那契数列的前20项值
- 算法高级(36)-如何利用并行提高算法的执行效率?
- 视频换脸AISWAP技术示例
- Python-进程与线程理论基础-Day10
- 三步完美完成wordpress外链跳转
- 一个网页如何决定是当前页打开还是新窗口打开?
- Java与模式.pdf
- windows无法访问指定计算机,windows无法访问指定设备路径或文件的解决方法
- ips 测试软件,IPS测试方法.doc
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 浅析运输管理系统(TMS)
- python——人工智能(AI)之网络图片文字识别案例详细讲解
- 焊接摆动与不摆动的区别
- [CF538H]Summer Dichotomy
- FFmpeg音视频倍速控制
- 不懂年轻人,还怎么带团队
- linux查看vm_type,【心得,备忘录】查看vmlinux的符号信息
- 计算机教学在语文中应用,信息技术在语文教学中的运用3篇论文
热门文章
- (001) RN开发之Mac搭建开发环境
- c语言1a和$20比较大小,[转载]Compare过程(字符的查询与比较)
- 用SERVLET进行用户名和密码验证
- Spark源码剖析 - SparkContext的初始化(八)_初始化管理器BlockManager
- Hadoop(十五)MapReduce程序实例
- 【Python算法】哈希存储、哈希表、散列表原理
- NetworkManager 冲突
- [LeetCode] Remove Element
- CSS盒子模型之CSS3可伸缩框属性(Flexible Box)
- Android Bitmap转换WebP图片导致损坏的分析及解决方案