巡逻的机器人

 题意:

机器人要从一个m*n(1<=m,n<=20)网格的左上角(1,1)到右下角(m,n)。网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示)。机器人每次可以往四个方向走一格,但不能连续穿越k个(0<=K<=20)障碍,求最短的长度。起点和终点保证是空地。如图:最短的长度是10.

Input

The input consists of several data sets. The first line of the input file contains the number of data sets which is a positive integer and is not bigger than 20. The following lines describe the data sets.

For each data set, the first line contains two positive integer numbers m and n separated by space (1mn20). The second line contains an integer number k(0k20). The ith line of the next m lines contains n integer aij separated by space (i = 1, 2,..., m;j = 1, 2,...,n). The value of aij is 1 if there is an obstacle on the cell (ij), and is 0 otherwise.

Output

For each data set, if there exists a way for the robot to reach the cell (mn), write in one line the integer number s, which is the number of moves the robot has to make; -1 otherwise.

Sample Input

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

Sample Output

7
10
-1

思路分析:

寻找最优解,采用BFS。

前提准备:

1、首先输入的K值就是机器人的血量,连续穿越K+1个障碍之后,机器人就会挂掉。然而如果第一次连续穿越了

K-1个障碍后又遇到0,那么就要给机器人加满血。

2、用一个三维数组来标记机器人来过这里,可赋值为1。第三维的数据用机器人走这条路剩余的血量表示。

3、用队列存储每一个结点,(即每一个中心,因为机器人每到达一个地方(中心)就有四个方向可走)

分析:

1、模拟机器人巡逻,碰到“1”就减血量。

2、每到达一个点,需要判断:点是否越界(就要换方向),点是否是终点(直接结束),点是否之前来过(换方向)

3、把可以走的点存进队列,继续上面的过程。

源代码:

 1 #include<iostream>
 2 #include<queue>
 3 #include<cstring>
 4 #define MAXN 25
 5 using namespace std;
 6 int to[4][2] = { -1, 0, 0, -1, 1, 0, 0, 1 };
 7 int n, m, z;
 8 int chess[MAXN][MAXN];
 9 int dot[MAXN][MAXN][MAXN];
10 struct node{
11     int x;
12     int y;
13     int z;
14     int step;
15 }R,R1,t;
16 int judge(int a, int b)
17 {
18     if (a >= n || a < 0 || b >= m || b < 0 )
19         return 1;
20     return 0;
21
22 }
23 int bfs()
24 {
25     queue<node>Q;
26     R.x = 0;
27     R.y = 0;
28     R.z = z;
29     R.step = 0;
30     dot[0][0][z] = 1;
31     Q.push(R);
32     while (!Q.empty())
33     {
34         t = Q.front();
35         Q.pop();
36         if (t.x == n - 1 && t.y == m - 1)  //到达目的地
37             return t.step;
38         for (int i = 0; i < 4; i++)
39         {
40             R1.x = t.x + to[i][0];
41             R1.y = t.y + to[i][1];    //* 之前是[0][i]
42
43             if (R1.x == n - 1 && R1.y == m - 1)
44                 return t.step + 1;
45             if (judge(R1.x, R1.y))       //判断越界,越界就换方向
46                 continue;
47
48             if (chess[R1.x][R1.y])  //*之前是dot[][]
49                 R1.z = t.z - 1;  //* 之前是z-1 ,减一表示机器人的血量
50             else
51                 R1.z = z;
52             if (R1.z < 0)
53                 continue;
54             if (dot[R1.x][R1.y][R1.z])  //*之前这句放在了越界的地方是错的,那里的Z还没赋值
55                 continue;                //判断机器人走过,就换方向
56             dot[R1.x][R1.y][R1.z] = 1;  //标记机器人走过这里
57             R1.step = t.step + 1;   //*
58             Q.push(R1);
59
60         }
61
62     if (Q.empty())            //*之前放在了循环里
63     {
64
65         t.step = -1;
66         return t.step;
67     }
68 }
69 }
70 int main()
71 {
72     int t;
73     cin >> t;
74     while (t--)
75     {
76         memset(chess, 0, sizeof(chess));
77         memset(dot, 0, sizeof(dot));
78         cin >> n >> m;
79         cin >> z;
80         for (int i = 0; i < n; i++)
81         {
82             for (int j = 0; j < m; j++)
83                 cin >> chess[i][j];
84         }
85         cout << bfs() << endl;
86
87
88     }
89     return 0;
90 }

心得:

这是第二次用BFS,不做不知道,做了才发现上一次对BFS的理解还不是很深刻,进而导致代码中出现了各种错误(*标记处),头文件也会忘记,cstring。这次做完这个题目,认真看了遍,比上次理解得更深刻了,用BFS要注意初始化,越界问题,定义的变量多少的问题,还有就是哪些变量跟着哪个点走,当然还有清零的问题。这次发现的问题比较多,总之加油吧!

时间: 2024-10-11 07:13:29

巡逻的机器人的相关文章

uva1660_巡逻的机器人(状态bfs)

/////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:tt2767 声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 查看本文更新与讨论请点击:http://blog.csdn.net/tt2767 链接被删请百度: CSDN tt2767 ///////////////

车牌识别:安防机器人车库巡逻的最佳搭档

关键词:车牌识别,车牌识别软件,PC端车牌识别,Windows车牌识别,Linux车牌识别,移动端车牌识别,手机端车牌识别,Android车牌识别,iOS车牌识别 安防机器人又称安保机器人,是半自主.自主或者在人类完全控制下协助人类完成安全防护工作的机器人.安防机器人作为机器人行业的一个细分领域,立足于实际生产生活需要,用来解决安全隐患.巡逻监控及灾情预警等.从而减少安全事故的发生,减少生命财产损失.今天我们就以地下车库巡逻为例讲一下安防机器人使用吧! 安全一直都是居民生活.公司企业生产首先要考

巡逻机器人用应用的pc端车牌识别

PC端车牌识别产品形态 加密锁.车牌识别SDK开发包.开发文档pc端车牌识别使用背景 人工智能的发展,京东送件也用上了送件机器人,某机器人公司如今研发出巡逻机器人,用于对可以车辆的抓拍与检查,在停车的区域内,通过算法控制,边巡逻,边识别车牌号码,其中, 此识别的算法恰恰用上的是我们的PC版车牌识别,把PC版车牌识别sdk嵌入控制电脑中,边巡逻边识别车牌,轻而易举. PC版车牌识别sdk是北京易泊时代科技有限公司自主研发的应用于PC端的车牌识别软件,在智能交通系统.出入口管理系统.公安图帧系统.移

Patrol Robot UVa1600巡逻机器人

题意大概: 机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的左上角(1,1)走到右下角(m,n).网格中的一些格子是空地,用0表示,其它格子是障碍,用1表示.机器人每次可以往四个方向走一格,但不能连续地穿越k( [0,20] )个障碍,求最短路长度.起点和终点保证是空地. 思路:用bfs搜索即可,由于不能连续地穿越k个障碍,所以在原本的vis2维数组上面再添加1维,变成3维数组,表示穿越的墙的层数(障碍). 代码如下: #include<cstdio> #include<

当一切都由机器人完成,没有工作后我们会如何赚钱?

如果人工智能接管未来的所有工作,我们怎么办?首先,这只是一个假设.我将人工智能视为补充人类的工具,而不是替代人类的产物.更准确地说,当我谈到人工智能时,这里也包括自动化和机器人技术. 原则上如果人工智能接管人类所有现有的工作,那么所有的员工都将失业.在这种情况下,我不会有钱支付我需要的一切.但对我来说,包括面包师.消防员或银行家在内的所有人都是一样的.我仍然有时间做机器人不能做或人类喜欢做的事.在生产方面,他们将通过机器人生产产品,这比人工便宜且性能更好.采用差异化战略将是困难的,因为人工智能将

基于二维码的自适应安防巡逻系统

本作品采用嵌入式系统技术,结合无人机和二维码,借助开源计算机视觉库Open CV和机器人操作系统ROS,实现了室内大型场所的自适应安防巡逻.硬件方面,设计了 Parrot ardrone 2.0无人机作为载体,Minnow Board Turbot主板作为嵌入式核心版的系统.软件方面,编写了无人机飞行控制和图像处理的程序,利用PID控制算法实现了无人机的飞行控制. 整个系统包含无人机.二维码和主板,无人机是直接巡逻的工具,二维码给定飞行路线,主板放置于大型场所的房顶来与无人机通信实现控制.系统的

医疗服务机器人能否解决愈发严重的养老问题?

随着人类医疗技术水平的不断提升,人的寿命也在不断延长.一个最为明显的现象就是,古代寿命超过百岁的老人基本上很难寻见,但是在今天,百岁老人已经不是一件稀奇的事情了.同时这也引来了一个越来越严重的社会问题:养老! 目前在中国,超过60岁以上的老人已经多达2亿人,养老问题日益严重.而且当前国内正在进入人口老龄化的快速发展时期,老年人口数量每年都在以年均800万以上的规模激增.预计到2020年,老年人口将达到2.55亿,2033年突破4亿,2050年达到4.83亿.可是面对规模越来越庞大的老年群体,国内

国产机器人警察 功能齐全堪比“阿法狗”-中国机器人信息网

7月20日,香港<南华早报>报道,中国开发了机器人警察,将在银行.机场和学校等公共区域巡逻.这种机器人警察可以嗅出炸弹,用机械钳抓获犯罪嫌疑人,还能电击.该项目背后的军方研究人员说,这些机器人警察将开始在公共场所巡逻. 报道称,这个叫“AnBot”的机器人在湖南长沙的国防科技大学进行研制,其原型上月在重庆举办的一个高科技博览会上最终公之于众. 国防科技大学开发团队的领导肖湘江说,AnBot在长沙的一个军营.机场和博物馆进行了测试,取得了“非常积极”的用户反馈.这种通过轮子移动的机器人可以连续不

2019北京工业机器人博览会、国际机器人科技展

第二十二届中国北京国际科技产业博览会2019年中国北京国际机器人科技展 时间:2019年5月16-19日地点:中国国际展览中心(老馆) 主办单位: ×××科学技术部 ××××××中国国际贸易促进委员会 北京市人民政府 支持单位:×××教育部 ×××工信部×××商务部 ×××国有资产监督管理委员会 中国中央电视台 顾问单位:×××中国企业联合会××× 中国科学技术协会××× 中国全国归国华侨联合会 承办单位:北京市贸促会 北京艾尚国际展览有限公司 一.展会概况中国北京国际科技产业博览会(简称科博会