UVA_1600 Patrol Robot
来源:互联网 发布:烈火封神翅膀升级数据 编辑:程序博客网 时间:2024/05/24 05:36
题目
UVA_1600 Patrol Robot
题意
机器人从地图左上角走到地图右下角.
地图上有障碍物,机器人最多可以连续跨越k个障碍物(注意没有要求必须是直线),询问最短路径
解决
- 在正常的BFS上面增加一些条件
- 增加vis数组的第三个维度.第三个维度表示在当前位置,已经穿越的障碍物数量为level的情况是否已经被处理
- 注意同一地点,不同level不冲突,比如
vis[1][2][2]==1
,当访问到vis[1][2][1]==0
的时候,仍然要进行处理.
#define rep(i,a,b) for(int i=a;i<(b);++i)int n,m,k;int maps[25][25];int vis[25][25][25]; //第三个维度表示在当前位置下,level(已经穿过几个障碍物)的情况已经处理过 //注意同一地点,不同level是可以走的.struct point{ int x,y,dist,layer; point(int x,int y,int dist,int layer):x(x),y(y),dist(dist),layer(layer){}}; //struct 后面要加分号..经常忘记加,该打...point st(1,1,0,0);int bfs(){ queue<point> Q; memset(vis,0,sizeof(vis)); Q.push(st); vis[1][1][0]=1; while(!Q.empty()) { point ans=Q.front(); Q.pop(); if(ans.x==m&&ans.y==n) return ans.dist; for(int dx=-1;dx<=1;dx++) { for(int dy=-1;dy<=1;dy++) { //如果是八连通问题,可以直接注释掉下面这行 if(dx*dy!=0||(!dx&&!dy)) continue; int nx=ans.x+dx , ny=ans.y+dy; int layer=ans.layer; if(nx>0&&ny>0&&nx<=m&&ny<=n) //坐标合法 { if(maps[nx][ny]) layer++; //新的节点仍为障碍物 else layer=0; if(layer<=k&&!vis[nx][ny][layer]) { vis[nx][ny][layer]=1; Q.push(point(nx,ny,ans.dist+1,layer)); } } } } } return -1; //并没有到达终点}int main(){ int cases; scanf("%d",&cases); while(cases--) { scanf("%d%d%d",&m,&n,&k); rep(i,1,m+1) rep(j,1,n+1) scanf("%d",&maps[i][j]); printf("%d\n",bfs()); }}
阅读全文
0 0
- UVA_1600 Patrol Robot
- 【uva】1600 - Patrol Robot
- UVa 1600 - Patrol Robot
- UVA 1600 Patrol Robot
- uva1600 - Patrol Robot
- 1600 - Patrol Robot
- UVA1600 - Patrol Robot
- UVa 1600 Patrol Robot
- UVA 1600 Patrol Robot
- Uva - 1600 - Patrol Robot
- uva 1600 Patrol Robot
- UVA - 1600 Patrol Robot
- UVA 1600 Patrol Robot
- uva1600 Patrol Robot
- UVa 1600 Patrol Robot
- UVA 1600 Patrol Robot
- UVA 1600 Patrol Robot
- uva 1600Patrol Robot
- linux下boost编译
- 服务器车牌云识别使用方案
- Centos 7 安装 Python3.6后yum无法使用的解决方法
- HBase全网最佳学习资料汇总
- Linux--防火墙策略 iptables(续)
- UVA_1600 Patrol Robot
- UVA_439 Knight Moves
- Leetcode题目总结-Linkedlist-题目206和234
- poj 2774 后缀数组
- ISP-镜头阴影校正(LSC)
- Writable接口 与 WritableComparable接口
- HDU 1257 最少拦截系统 (贪心)
- Kotlin 扩展函数详解与应用
- C++(2)