需要注意的一点是:障碍物可以访问多次(因为当访问此障碍物时,当前路径穿过的连续障碍物次数大于或小于以前的路径也可以访问该点(也许以前的路径并不能走到终点))

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=20+2;
struct node{int x,y,obs;        //obs 表示当前连续穿过的障碍物 node(int x=0,int y=0,int obs=0):x(x),y(y),obs(obs){}
};
int p[maxn][maxn];
int d[maxn][maxn][maxn];
int n,m,k;
int dir[][2]={{-1,0},{1,0},{0,1},{0,-1}};
bool isValid(node &nd){return nd.x>=1 && nd.x<=n && nd.y>=1 && nd.y<=m;
}
void bfs(){memset(d,0,sizeof(d));queue<node> q;q.push(node(1,1,0));while(!q.empty()){node u=q.front();q.pop();if(u.x==n && u.y==m){printf("%d\n",d[u.x][u.y][0]);return ;}for(int i=0;i<4;i++){node v=node(u.x+dir[i][0],u.y+dir[i][1],0);if(isValid(v)){if(!p[v.y][v.x] && !d[v.x][v.y][0]){ //如果不是障碍物,并且没有访问过 q.push(v);d[v.x][v.y][0]=d[u.x][u.y][u.obs]+1; //obs表示穿过的障碍物,如果为0,那么此点一定不是障碍物1 }else if(p[v.y][v.x]==1 && u.obs<k && !d[v.x][v.y][u.obs+1]){ //如果是障碍物 v.obs=u.obs+1;q.push(v);d[v.x][v.y][v.obs]=d[u.x][u.y][u.obs]+1;} }}}printf("-1\n");
}
int main(){int T;
//  freopen("in.txt","r",stdin);scanf("%d",&T);while(T--){scanf("%d%d",&m,&n);scanf("%d",&k);for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)scanf("%d",&p[i][j]);bfs();} return 0;
}

如有不当之处,欢迎指出,谢谢!

UVA 1600 Patrol Robot 巡逻机器人(BFS)相关推荐

  1. UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)

    非常适合A*的一道题. 比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量. #include<cstdio> #include<cstring> #include< ...

  2. UVA - 1600 Patrol Robot (巡逻机器人)(bfs)

    题意:从(1,1)走到(m,n),最多能连续穿越k个障碍,求最短路. 分析:obstacle队列记录当前点所穿越的障碍数,如果小于k可继续穿越障碍,否则不能,bfs即可. #pragma commen ...

  3. UVa 1600 Patrol Robot (习题 6-5)

    传送门: https://uva.onlinejudge.org/external/16/1600.pdf 多状态广搜 网上题解: 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰 ...

  4. 【UVa】1600 Patrol Robot(dfs)

    题目 题目 分析 bfs可以搞,但是我还是喜欢dfs,要记忆化不然会T 代码 #include <cstdio> #include <cstring> #include < ...

  5. UVa1600 PatrolRobot 巡逻机器人(bfs)

    题目大意:给定一个网络(1m,n20)m是row,n是col,求从(1,1)到点(m,n)的最短路径,其中0是空地,1是障碍物,给定k,表示不能连续穿过k个障碍物, 方法:bfs,其中必须要注意的是每 ...

  6. UVA 1600 巡逻机器人

    巡逻机器人 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu 题意·:一个机器人从(1,1)点走到( ...

  7. 巡逻机器人(BFS)

    巡逻机器人问题(F - BFS,推荐) Description   A robot has to patrol around a rectangular area which is in a form ...

  8. BFS 巡逻机器人

    巡逻机器人 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/F 题目大意: 机器人在一个矩形区域巡逻, ...

  9. 工业机器人 郝卫东_智能保安巡逻机器人论文

    第 1 页 共 5 页 智能保安巡逻机器人 黄海明 杨雷 宋跃 赖思沅 ( 东莞理工学院电子工程学院,广东 东莞 523808) 摘 要: 设计一个具有自动远程值守. GPRS 遥控. 远程监控等功能 ...

最新文章

  1. 第八篇——Struts2的处理结果类型
  2. 震撼!豆瓣评分9.3,这部纪录片带你感受生命之重!
  3. 树莓派 python_树莓派笔记08—Python流水灯
  4. Python求解多元非线性方程组
  5. 2016/06/11
  6. 方维团购系统二次开发,项目经验
  7. dex2jar的使用
  8. JSONObject.fromObject 找不到这个方法或是报错
  9. darkest dark theme 插件对应eclipse各版本安装方法
  10. 整车控制器(VCU/HCU)开发咨询服务
  11. Qt手动设置Kits套件
  12. js练习:模拟京东快递单号查询
  13. Received status code 409 from server: Conflict
  14. 计算机亮度快捷键,电脑亮度怎么调(一个快捷键就可以设置亮度了)
  15. C# 常用Excel导出的几种常见方式及实现步骤
  16. yocto的bitbake过程记录
  17. iOS9有哪些新特性
  18. 曲线拟合的最小二乘原理
  19. 886n虚拟服务器,TP-Link TL-WR886N V4路由器端口映射怎么设置
  20. 公众号开发需要学什么_开发微信公众号需要多长时间

热门文章

  1. 信号处理和模式识别方面的MATLAB工具箱
  2. GridControl GridView 单元格内容换行
  3. 计算机动态图显示原理,30张传感器工作原理动态图
  4. 记一次 feign.FeignException: status 404 reading xxx 问题解决
  5. 谷歌黑搜索怎么收_谷歌搜索持久的反黑种族主义
  6. 计讯物联环保数采仪全系列产品为节能降耗减碳贡献绿色力量
  7. win10 右键卡顿问题
  8. 常见sketch简介
  9. python怎样分析文献综述怎么写_本科毕业论文如何撰写文献综述
  10. ShaderJoy —— “圆点消散” 的实现 【GLSL】