首先这道题的意思就是,你走到没有障碍的地方,你连续穿越的障碍数就是0,走一个障碍+1,如果走到0那么连续障碍数归零,用一个结构体来保存状态,这时状态变成了三个,还有一个是走到这个点连续穿越的障碍数,通过样例可以知道,你走到某点的连续障碍数可以等于那个最大值,不能超过,所以程序就比较好写了,我的习惯还是用一个数组来保存书否访问过还有走的步数两个数据,初始化为-1,那么不是-1就说明走过,并且里面的值就是步数,并且bfs函数刚开始入队的时候也要判断一下是不是起点就是障碍,并且限制是0,那么应该是走不了的,但是uva卡了,用的udebug,这样写,1000个数据的样例过了,不写也有可能过,就不试了

#include <bits/stdc++.h>#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;struct path{int x, y, suc;path(int a, int b, int c): x(a), y(b), suc(c) {}
};int n, m, k;
int mat[25][25];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};int bfs() {queue<path> q;int vis[25][25][25];fill((int*) vis, (int*) vis + 25 * 25 * 25, -1);if(!(!k && mat[1][1])) {if (!mat[1][1]) { q.push(path(1, 1, 0)); vis[1][1][0] = 0; }else { q.push(path(1, 1, 1)); vis[1][1][1] = 0; }}while (!q.empty()) {path now = q.front();q.pop();if (now.x == n && now.y == m) return vis[now.x][now.y][now.suc];for (int i = 0; i < 4; i++) {int x = now.x + dx[i];int y = now.y + dy[i];int suc = (mat[x][y] ? now.suc + 1 : 0);if (x < 1 || x > n || y < 1 || y > m || suc > k) continue;if (vis[x][y][suc] != -1) continue;q.push(path(x, y, suc));vis[x][y][suc] = vis[now.x][now.y][now.suc] + 1;}}return -1;
}int main() {int t;cin >> t;while (t--) {cin >> n >> m >> k;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> mat[i][j];}}cout << bfs() << endl;}return 0;
}

UVA1600 巡逻机器人 Patrol Robot相关推荐

  1. 习题6-5 UVA1600 巡逻机器人 Patrol Robot

    难度:4 稍微难一点的bfs,以前数组的bfs都是用二维,来记录这个点入过队没有,但是题目加了一个条件,那就是最多连续穿墙不超过一个数,那么这就又是一维状态,加一维来表示到这个点连续穿墙的次数,也就是 ...

  2. 简单BFS 紫书 UVA 1600 巡逻机器人(Patrol Robot)

    题目链接: https://vjudge.net/problem/UVA-1600 思路 开了一个二维数组buf记录图的信息. Node中额外开了一片内存用来储存穿墙信息. 这道题一定要注意将点标记为 ...

  3. Patrol Robot UVa1600巡逻机器人

    题意大概: 机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的左上角(1,1)走到右下角(m,n).网格中的一些格子是空地,用0表示,其它格子是障碍,用1表示.机器人每次可以往四个方向 ...

  4. Uva1600 巡逻机器人

    题目描述: 机器人从一个\(m\times n\)网格的左上角\((1,1)\)走到右下角\((m,n)\).网格中的一些格子是空地,用\(0\)表示,其他格子是障碍,用\(1\)表示.机器人每次可以 ...

  5. uva-1600 巡逻机器人

    bfs判断visited最好还是在入栈之前,这道题的就算visited==true,但如果走过的'1'数量比较少的话,还是可以继续入栈的 #include <cstdio> #includ ...

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

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

  7. 巡逻机器人(BFS)

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

  8. 瓦力机器人故障维修_大眼萌!5G巡逻机器人亮相乌镇,24小时值守互联网大会...

    大大的眼睛,方方的身体, 一台酷似"瓦力"的机器人 出现在互联网之光新展馆. 原来这是嘉兴公安的"新同事"-5G巡逻机器人,今天是它第一天上岗.这也是本次世界互 ...

  9. 纸板箱机器人制作比例图纸_造一个黄油机器人(Butter Robot)

    上次制作了Rick的传送枪,这次我们来做个大一点的活,就是黄油机器人(Butter Robot)了. 我觉得一个Rick and Morty的粉丝兼一名Maker 一定会制作这一个剧中最受欢迎的机器人 ...

最新文章

  1. 网络营销外包专员浅析从用户角度出发如何完善网络营销外包?
  2. 11gR2 RAC启用iptables导致节点宕机问题处理
  3. vivado烧写FPGA速度调节
  4. wxpython的sizer_wxPython BoxSizer布局
  5. java response 输出流_java-springmvc+filter 替换输出流、response、响应内容
  6. 大数据如何改善社会治理:国外“大数据社会福祉”运动的案例分析和借鉴
  7. 毕业进行时:人生的二次选择
  8. wifi6路由器使用tcpdump抓包
  9. Codeforces Gym 100015B Ball Painting 找规律
  10. 勒让德函数C语言编程设计,用递归方法求n阶勒让德多项式的值
  11. jadx 1.4.5反编译包不全
  12. 前端移动端页面与手机尺寸和分辨率的关系
  13. android手机整体规模,2021年Android手机市场规模
  14. 微信小程序 17 个人中心和登录 的跳转
  15. android 广告库sdk,GitHub - adxdata/sdk-android-demo: 美数广告SDK(Android)示例
  16. pdf会签_设备验收管理办法20140604(会签签批版).pdf
  17. 前端PC端微信扫码登录
  18. 程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)
  19. 【蓝桥杯c++(Python)每日练习】每日刷题day10:小雨妹的游泳时间,小雨妹的平均数
  20. 实用教程 | 00—网易邮箱大师(APP与电脑版)均可收发谷歌Gmail邮件。

热门文章

  1. 自己动手撸一个Jlink-TinyJlink诞生记
  2. WiFi-ESP8266入门http(3-1)网页认证上网-post请求(原教程)
  3. 2021年汽车驾驶员(技师)模拟考试软件及汽车驾驶员(技师)理论考试
  4. php扩展库后门,编写基于PHP扩展库的后门
  5. PyQt实现按钮控件的拖动效果,利用鼠标移动事件实现。
  6. 听觉能力类毕业论文文献有哪些?
  7. 告别平淡(平庸)从做难事儿开始
  8. BNUZ-ACM 2018国庆新生欢乐赛部分题解+思路(已解出答案部分)
  9. iOS中最值得设计师学习的33个APP图标
  10. spring接管mybatis