机器人迷宫


目录

  • 机器人迷宫

    • 目录
    • 题目描述
    • 格式要求
    • 样例
    • 数据大小
    • 样例说明
    • 错解
    • 正解

题目描述

一个机器人需要巡逻一个m*n的迷宫(m行n列),一个单元格(i,j)表示第i行第j列,机器人每次只能从一个格子移到另一个格子,并只能像(i+1,j),(i-1,j),(i,j+1),或(i,j-1)这样移动到相邻的格子上。
网格中的一些格子中含有障碍物。为了穿过到含有障碍的格子,机器人必须切换到涡轮增压模式。因此,机器人不能连续穿过超过含k个障碍的网格。
你的任务是写一个程序,使得机器人从(1,1)到第(m,n)个格子的最短路径。输入保证起点与终点无障碍。

格式要求

输入格式
第一行:一个整数T,表示测试组数,每组测试数据的格式为:
第1行:两个整数m,n,表示迷宫的行数和列数, 第2行:一个整数k(k 小于 m 与n),表示允许机器人连续穿越的格子数。最后有m行n列个数字0 和 1,其中1表示第(i,j)个格子有障碍,0表示无障碍。
输出格式
每组数据一个整数表示最短路的长度。如果不能到达则输出-1。

样例

输入

3
2 5
0
0 1 0 0 0
0 0 0 1 0
4 6
1
0 1 1 0 0 0
0 0 1 0 1 1
0 1 1 1 1 0
0 1 1 1 0 0
2 2
0
0 1
1 0

输出

7
10
-1

数据大小

测试组数保证小于30
对于75%的数据 1 <= m,n <= 200
对于另外25%的数据 200 < m,n <= 500

样例说明

测试数据1

测试数据2

测试数据3
因为机器人最多能开0个时间单位,也就是无法开启涡轮增压模式,而起点和终点之间又重重障碍阻隔,所以机器人不能成功。


注:黑线代表机器人正常行走,红线代表机器人开启涡轮增压飞行。

错解

这熟悉的作风,一看就是BFS啦!
但是,我出现了一个疏忽!那就是——机器人在涡轮增压模式下只能直行。

//代码之后再放(找不到了)

正解

就这样吧,很难看的,(╯﹏╰)

//代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define M 500
#define N 250000
using namespace std;
int m,n,k;
bool maze[M+1][M+1],passed[M+1][M+1];
int R[4]={1,-1,0,0},C[4]={0,0,1,-1};
int x[N+1],y[N+1],q[N+1],d[N+1];
void scan()
{memset(passed,0,sizeof(passed));cin>>m>>n>>k;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)cin>>maze[i][j];
}
void bfs()
{int head=0,tail=1,nextx,nexty,nextq;x[1]=1,y[1]=1,passed[1][1]=1;while(head<tail){head++;for(int i=0;i<4;i++){nextx=x[head]+R[i];nexty=y[head]+C[i];nextq= maze[nextx][nexty]? q[head]+1:0;if(min(nextx,nexty)<=0||nextx>m||nexty>n)continue;if(passed[nextx][nexty]||nextq>k)continue;tail++;x[tail]=nextx;y[tail]=nexty;q[tail]=nextq;d[tail]=d[head]+1;//printf("%d %d->%d %d/%d\n",x[head],y[head],nextx,nexty,d[tail]);passed[nextx][nexty]=1;if(nextx==m&&nexty==n){printf("%d\n",d[tail]);return ;}}}printf("-1\n");
}
int main()
{//freopen("robot.in","r",stdin);//freopen("robot.out","w",stdout);int t;cin>>t;while(t--){scan();bfs();}
}

C++周末训练题-机器人迷宫(BFS)相关推荐

  1. [AcWing算法刷题]之DFS+BFS迷宫模板(简单)

    题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围​ 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...

  2. 华为机试二星题--机器人走迷宫

    题目 机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入. 机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不 ...

  3. 【动态规划】机器人走迷宫-BFS

    机器人走迷宫-BFS 题目描述:给一个矩阵,0代表可走位置,1代表障碍物 给定起点和终点和行走规则(上.下.左.右),输出最短路径 探寻最短路径-BFS 首先定义两个辅助函数,valid_action ...

  4. 献给阿尔吉侬的花束(二刷,迷宫bfs,模板题)

    文章目录 Question Ideas Code Question 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终 ...

  5. Tarjan相关最全(附训练题和答案)

    Tarjan相关最全(附训练题和答案) 算法思想 Tarjan 强连通分量 割点 割桥 缩点 Kosaraju Garbow 训练 POJ2186 POJ1236 POJ2375 Luogu P338 ...

  6. 二级计算机为让利消费者,计算机二级office题库训练题(2)

    D.计算机病毒是一个特殊的寄生程序 15. 以下关于编译程序的说法正确的是( ). A.编译程序属于计算机应用软件,所有用户都需要编译程序 B.编译程序不会生成目标程序,而是直接执行源程序 C.编译程 ...

  7. 如何用TensorFlow训练聊天机器人(附github)

    前言 实际工程中很少有直接用深度学习实现端对端的聊天机器人,但这里我们来看看怎么用深度学习的seq2seq模型来实现一个简易的聊天机器人.这篇文章将尝试使用TensorFlow来训练一个基于seq2s ...

  8. 职称计算机windows 7,2017职称计算机考试Windows训练题

    2017职称计算机考试Windows训练题 考试考点往往贯穿在平时我们练习的习题中,下面是小编给大家提供的职称计算机考试Windows训练题,大家可以参考练习,更多习题练习请关注应届毕业生考试网. 1 ...

  9. c语言编程思维训练50题,c语言逻辑思维训练题一

    c语言逻辑思维训练题一 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 要求:用java实现下面的所有题目,2012年11月1日提交 ...

最新文章

  1. Netbeans学习总结
  2. java如何构造ajax回调参数,jQuery实现ajax回调函数带入参数的方法示例
  3. P6855-「EZEC-4.5」走方格【dp】
  4. 如何监视ps/查询的性能和使用
  5. springboot实现单点登录_什么是单点登录,php是如何实现单点登录的
  6. VMware Player 12.5.0 中文免费版
  7. seajs的模块化开发--实践笔记
  8. 万元奖金 , 百万流量 , 助你成为CSDN超级红人 !
  9. Phome开发历程分享——Enjoy the Beginning
  10. 190530每日一句
  11. PID参数整定快速入门(调节器参数整定方法)
  12. 如何免费获取国外硕博学位论文全文资源
  13. 什么是Cutoff Scores/Marks?
  14. 洛谷P4704 太极剑(乱搞)
  15. 快递电子面单接口php,快递电子面单
  16. LeetCode——线段树
  17. docker网络原理及cgroup
  18. 第八届中国高等院校设计作品大赛启动
  19. 【环境配置】配置jdk
  20. 闭环二阶系统阻尼比和阶跃响应超调量的关系(笔记)

热门文章

  1. 3DMAX利用IGame导出骨骼动画概要
  2. 科技新品 | 富士胶片研发出全球最大容量数据流磁带;iGame发布内存新品“古德白”...
  3. day03 Http协议Request
  4. springboot结合shiro中anon配置失效
  5. Ambarella公司申请首次公开招股
  6. C语言程序设计现代方法(第二版)十二章编程题答案
  7. Linux内核中内存分配函数
  8. 上界通配符、下界通配符
  9. Python 进程 自定义进程子类 继承
  10. Android深入浅出系列课程---Lesson13 LLY110529_虚拟机概述,JIT概述