题目链接: https://vjudge.net/problem/UVA-1600

思路

开了一个二维数组buf记录图的信息。
Node中额外开了一片内存用来储存穿墙信息。
这道题一定要注意将点标记为visited的位置。
第一次提交将语句写在了下方代码现在注释掉的位置,这样是不对的,例如下面这组数据

1
12 20
2
0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0

可以自己跑一下看看错误发生在哪。

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#include <utility>
using namespace std;int buf[50][50];
int vis[50][50];
int r, c, k;int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };struct Node
{int x;int y;int b;int dis;Node(int x, int y, int b, int dis) :x(x), y(y), b(b), dis(dis) {};
};void bfs()
{memset(vis, 0, sizeof(vis));queue<Node> q;q.push({ 0, 0, 0, 0 });vis[0][0] = 1;while (!q.empty()) {Node u = q.front(); q.pop();if (u.x == r - 1 && u.y == c - 1) {printf("%d\n", u.dis);return;}vis[u.x][u.y] = 1;for (int i = 0; i < 4; i++) {int next_b = buf[u.x + dx[i]][u.y + dy[i]] ? u.b + 1 : 0;Node next(u.x + dx[i], u.y + dy[i], next_b, u.dis + 1);if (next.x >= 0 && next.x < r && next.y >= 0 && next.y < c && !vis[next.x][next.y] && next.b <= k) {q.push(next);//vis[u.x + dx[i]][u.y + dy[i]] = 1;}}}printf("-1\n");}int main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifint t; cin >> t;while (t--) {cin >> r >> c >> k;for (int i = 0; i < r; i++) {for (int j = 0; j < c; j++) {scanf("%d", &buf[i][j]);}}bfs();}return 0;
}

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

  1. UVA 1600 巡逻机器人

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

  2. UVa 1600 巡逻机器人(Patrol Robot)

    机器人要从一个网格的左上角走到右下角,网格中的一些格子是空地,用0表示,障碍物用1表示,机器人每次可以往上下左右走1格,但不能连续的穿过k格障碍,求最短路的长度,起点终点保证是空地. 要点: 本题乍看 ...

  3. UVA1600 巡逻机器人 Patrol Robot

    首先这道题的意思就是,你走到没有障碍的地方,你连续穿越的障碍数就是0,走一个障碍+1,如果走到0那么连续障碍数归零,用一个结构体来保存状态,这时状态变成了三个,还有一个是走到这个点连续穿越的障碍数,通 ...

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

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

  5. UVA:1600 巡逻机器人

    转载:https://blog.csdn.net/u014004096/article/details/42920629 题意大概: 机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的 ...

  6. UVa 1339,紫书P73,词频

    题目链接:https://uva.onlinejudge.org/external/13/1339.pdf 紫书P73 解题报告: #include <stdio.h> #include ...

  7. BFS 巡逻机器人

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

  8. 巡逻机器人(BFS)

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

  9. UVa 11062 Andy's Second Dictionary(刘汝佳紫书升级题)

    在介绍这道题之前,先介绍一下紫书里面和这道题很像的一道题: 紫书P112页 的例题5-3 安迪的第一个字典(Andy's First Dictionary UVa 10815) 原题链接如下: And ...

最新文章

  1. Hello Shell
  2. mysql盲注_二十八、MySQL盲注
  3. WINCE基于MC8630的3G模块的控制和加载
  4. NorthWest University - Medical Engineering
  5. 《Java技术》第八次作业
  6. [BZOJ3124]直径
  7. [Pa2013]Iloczyn
  8. java的IO总结(一)
  9. windows java 进程_windows下java -jar 后台运行以及杀死后台进程的操作
  10. Clover-系统集成功能可能被安全软件阻止,请关闭安全软件后重启Clover的解决方案
  11. 台式机双系统安装(windows10+ubuntu18.04)及ROS安装的坑点解决
  12. 聊聊技术人的“绩效考核”
  13. 四级高频词汇360个
  14. DBCO-PEG4-SUE DBCO-PEG4-蔗糖
  15. 小米10 MIUI11 安卓10安装面具获取root权限
  16. maven打包报内存不足,配置maven vm options
  17. php 表单必选改为选填,织梦dedecms自定义表单选项必填修改解决方法
  18. cdma特有效应_CDMA理论试题
  19. Git从本地向TFS push项目
  20. 可视化报告生成器FastReport VCL创建条形码教程指南

热门文章

  1. 电影与幸福感期末答案和平时测试答案
  2. inprivate浏览是什么意思_InPrivate浏览是什么?
  3. 万兆局域网方案_家庭万兆方案性价比之选,10G网速不是梦!
  4. springboot实现邮箱接收验证码
  5. DSNet: A Flexible Detect-to-Summarize Network for Video Summarizationa论文笔记
  6. 计算机奥林匹克竞赛基础知识,竞赛考什么?五大学科竞赛基础常识盘点
  7. 20200322零基础入门数据挖掘 - 二手车交易价格预测笔记(2)
  8. 看牛人如何学习JAVA-如何学习java
  9. 自定义组件使用el-dialog,且内含表单时,表单提交时字段报错undefined
  10. 原生m1/m2 Sketch v90 for Mac最新中文版Sketch已更新,已解决闪退打不开问题