hdu5094 BFS+状态压缩
来源:互联网 发布:什么叫教育大数据 编辑:程序博客网 时间:2024/06/11 14:47
写了模板题hdu1429
http://blog.csdn.net/williamsun0122/article/details/72137116
和2017华科现场赛hust1579
http://blog.csdn.net/williamsun0122/article/details/72229003
之后,这题虽然又有点不同,但本质一样。应该是可以直接AC的。
题意:50x50的地图,最多10个门。之后k代表门和墙的总数,接下来k行是x1,y1,x2,y2,g代表(x1,y1)和(x2,y2)两个位置之间是墙(g=0)还是门(g>0)
之后s代表s个钥匙的位置。
前面的基础打好之后,这题应该可以直接AC了。我就不写题解了,具体看看注释。
#include <bits/stdc++.h>using namespace std;int mp[55][55];bool vis[55][55][1025];int door[55][55][55][55]; //两个位置之间的状态,-1代表可以走,0代表墙,>0代表门int dis[4][2]={-1,0,0,-1,1,0,0,1};int n,m,p,k,s;struct node{ int x,y,key,step;}st;bool check(int a,int b,node tmp){ if(tmp.x<1 || tmp.x>n || tmp.y<1 || tmp.y>m) return false; else if(vis[tmp.x][tmp.y][tmp.key] || door[a][b][tmp.x][tmp.y]==0) return false; else return true;}void bfs(){ node tmp,next; memset(vis,false,sizeof(vis)); queue<node>q; vis[st.x][st.y][st.key]=true; q.push(st); while(!q.empty()) { tmp=q.front(),q.pop(); if(mp[tmp.x][tmp.y]) { //先看看当前位置有没有钥匙,有的话更新钥匙状态 tmp.key=tmp.key|mp[tmp.x][tmp.y]; vis[tmp.x][tmp.y][tmp.key]=true; } for(int i=0;i<4;i++) { next=tmp; next.x += dis[i][0]; next.y += dis[i][1]; next.step++; if(check(tmp.x,tmp.y,next)) { if(next.x==n&&next.y==m) { printf("%d\n",next.step); return; } int id=door[tmp.x][tmp.y][next.x][next.y]; if(id>0) //两个位置之间有门 { int flag=(next.key>>id)&1; //看看有没有对应钥匙 if(flag) { vis[next.x][next.y][next.key]=true; q.push(next); } } else { vis[next.x][next.y][next.key]=true; q.push(next); } } } } printf("-1\n");}int main(){ int x1,x2,y1,y2,g; while(~scanf("%d%d%d",&n,&m,&p)) { memset(mp,0,sizeof(mp)); memset(door,-1,sizeof(door)); scanf("%d",&k); for(int i=0;i<k;i++) { scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&g); door[x1][y1][x2][y2]=g; door[x2][y2][x1][y1]=g; } scanf("%d",&s); for(int i=0;i<s;i++) { scanf("%d%d%d",&x1,&y1,&g); mp[x1][y1]=mp[x1][y1]|(1<<g); } st.x=st.y=1,st.key=st.step=0; bfs(); } return 0;}
阅读全文
1 0
- hdu5094 状态压缩+bfs
- HDU5094->BFS&&状态压缩
- hdu5094(bfs,状态压缩)
- hdu5094 BFS+状态压缩
- hdu5094(BFS&状态压缩)
- 状态压缩(1)--hdu5094(状态压缩+bfs)(能力题)
- hdu5094 状态压缩dp+dps
- hdu5094 状压+bfs
- hdu5094(BFS+状压)
- BFS+状态压缩 HDU1429
- hdu1429(BFS+状态压缩)
- 状态压缩+bfs
- HDU_4856_Tunnels(BFS+状态压缩)
- bfs+状态压缩dp
- hdu1429 状态压缩+bfs
- [poj1324]状态压缩+BFS
- 状态压缩+bfs
- hdu4845 状态压缩BFS
- android 回调函数一:基本概念
- android 回调函数二:应用实例
- android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
- android XMl 解析神奇xstream 二: 把对象转换成xml
- AngularJs学习笔记——ui路由(多层嵌套/传参)和组件化结合的开发模式
- hdu5094 BFS+状态压缩
- 共享内存-锁
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
- Tensorflow源码解析系列--RNN
- SQL判断两个时间段是否有交集
- 关于Java三目运算符类型的困惑
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
- 【资料合集】Apache_Flink_精选PDF下载