题意:从(1,1)走到(m,n),最多能连续穿越k个障碍,求最短路。

分析:obstacle队列记录当前点所穿越的障碍数,如果小于k可继续穿越障碍,否则不能,bfs即可。

#pragma comment(linker, "/STACK:102400000, 102400000")
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define Min(a, b) ((a < b) ? a : b)
#define Max(a, b) ((a < b) ? b : a)
typedef long long ll;
typedef unsigned long long llu;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const ll LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
const int MAXN = 20 + 10;
const int MAXT = 10000 + 10;
using namespace std;
int pic[MAXN][MAXN];
int vis[MAXN][MAXN];
int m, n, k;
bool judge(int x, int y){return x >= 1 && x <= m && y >= 1 && y <= n;
}
int bfs(){queue<int> x, y, step, obstacle;x.push(1);y.push(1);step.push(0);obstacle.push(0);vis[1][1] = 1;while(!x.empty()){int tmpx = x.front(); x.pop();int tmpy = y.front(); y.pop();int tmpstep = step.front(); step.pop();int tmpobstacle = obstacle.front(); obstacle.pop();for(int i = 0; i < 4; ++i){int tx = tmpx + dr[i];int ty = tmpy + dc[i];if(judge(tx, ty) && !vis[tx][ty]){if(tx == m && ty == n) return tmpstep + 1;if(pic[tx][ty] == 0){vis[tx][ty] = 1;x.push(tx);y.push(ty);step.push(tmpstep + 1);obstacle.push(0);}else if(pic[tx][ty] == 1){int nowobstacle = tmpobstacle + 1;if(nowobstacle <= k){x.push(tx);y.push(ty);step.push(tmpstep + 1);obstacle.push(nowobstacle);}}}}}return -1;
}
int main(){int T;scanf("%d", &T);while(T--){memset(pic, 0, sizeof pic);memset(vis, 0, sizeof vis);scanf("%d%d%d", &m, &n, &k);for(int i = 1; i <= m; ++i){for(int j = 1; j <= n; ++j){scanf("%d", &pic[i][j]);}}int ans = bfs();printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/tyty-Somnuspoppy/p/6282044.html

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

  1. UVA 1600 Patrol Robot 巡逻机器人(BFS)

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

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

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

  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. 线程 synchronized锁机制
  2. SYSCALL_DEFINE含义
  3. 怎么获取layer中的表单值_layer获取弹出frame层数据
  4. ffmpeg利用libav库把yuv视频流转换为TS串流
  5. php接收vue请求数据axios,详解vue axios用post提交的数据格式
  6. Intellij IDEA15:建立Scala的Maven项目
  7. DC/OS 的安装与部署
  8. [Java] 蓝桥杯BASIC-25 基础练习 回形取数
  9. chrome无法打开某些网页,但safari可以
  10. C#网络编程----文件流
  11. pl2303hxa串口线驱动_Prolific PL2303 USB转串口线驱动
  12. 让你的网站用上炫酷的中文字体
  13. 怎样把word文档里的html格式去掉,word文档去除格式
  14. 什么叫定向广告?定向传播有哪些好处
  15. Java就业面试问题大全
  16. 【uniapp开发小程序之地图展示】地图位置、地图选点展示效果
  17. 5月中国减持美国国债325亿美元 持有8677亿美元
  18. ibatis配置文件中 parameterClass,resultClass,resultMap 表示的意思
  19. php咕咚授权,线上跑扬马一样精气神 授权咕咚举办万跑友已报名
  20. 【漏洞复现】RTF URL Moniker 的逻辑漏洞 | OLE2Link 漏洞(CVE-2017-0199)

热门文章

  1. Django项目——CRM
  2. 万字拆解!追溯ChatGPT各项能力的起源
  3. ftp服务器可以创建文件夹吗,ftp服务器如何创建文件夹
  4. python 随机森林分类 DecisionTreeClassifier 随机搜索优化参数 GridSearchCV
  5. 删除商品时,如何不影响订单里该商品相关的信息显示
  6. eigen坐标变换_Eigen实现坐标转换
  7. C++ GUI Programming with Qt4 Second Edition 之 附录A.2 Windows系统Qt的安装
  8. 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
  9. 华为hcia-datacom 学习日记
  10. 卡券优惠接口对接开发源码