习题6-5 UVA1600 巡逻机器人 Patrol Robot
难度:4
稍微难一点的bfs,以前数组的bfs都是用二维,来记录这个点入过队没有,但是题目加了一个条件,那就是最多连续穿墙不超过一个数,那么这就又是一维状态,加一维来表示到这个点连续穿墙的次数,也就是题目貌似加了障碍,但这个障碍是一会儿可走一会儿不可走的,不像别的题,要么可走要么不可走,这个一开始你穿过的障碍物少的时候,是可以走的,等穿的墙多了,就变得不可走了,所以就是可能几次走到了同一点,但是穿墙次数不一样,这时属于不同的情况,所以开一维数组来表示这不同的情况。
然后需要想明白的很重要的一个点是,当前点的k,也就是连续穿墙次数,如果当前点不是障碍物,那么归零,如果是障碍物,那么由前一个点的k加一,以前是判断两个值,也就是会不会出界,现在加上一个要判断的值,
#include <bits/stdc++.h>#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;struct node {int x, y, k;node() {}node(int a, int b, int c): x(a), y(b), k(c) {}
};int n, m, k;
int graph[30][30];
int vis[30][30][30];
int ans[30][30][30];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {-1, 0, 1, 0};bool judge(int x, int y, int kk) {if (x < 1 || x > n || y < 1 || y > m || kk > k) return false;return true;
}int bfs() {memset(vis, 0, sizeof(vis));queue<node> q;q.push(node(1, 1, 0));vis[1][1][0] = 1;ans[1][1][0] = 0;while(!q.empty()) {node now = q.front();q.pop();if (now.x == n && now.y == m) return ans[now.x][now.y][now.k];for (int i = 0; i < 4; i++) {int xx = now.x + dx[i];int yy = now.y + dy[i];int kk;if (graph[xx][yy]) kk = now.k + 1;else kk = 0;if (judge(xx, yy, kk) && !vis[xx][yy][kk]) {q.push(node(xx, yy, kk));vis[xx][yy][kk] = 1;ans[xx][yy][kk] = ans[now.x][now.y][now.k] + 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 >> graph[i][j];}}cout << bfs() << endl;}return 0;
}
习题6-5 UVA1600 巡逻机器人 Patrol Robot相关推荐
- UVA1600 巡逻机器人 Patrol Robot
首先这道题的意思就是,你走到没有障碍的地方,你连续穿越的障碍数就是0,走一个障碍+1,如果走到0那么连续障碍数归零,用一个结构体来保存状态,这时状态变成了三个,还有一个是走到这个点连续穿越的障碍数,通 ...
- 简单BFS 紫书 UVA 1600 巡逻机器人(Patrol Robot)
题目链接: https://vjudge.net/problem/UVA-1600 思路 开了一个二维数组buf记录图的信息. Node中额外开了一片内存用来储存穿墙信息. 这道题一定要注意将点标记为 ...
- Patrol Robot UVa1600巡逻机器人
题意大概: 机器人要从一个m*n(m和n的范围都在1到20的闭区间内)的网格的左上角(1,1)走到右下角(m,n).网格中的一些格子是空地,用0表示,其它格子是障碍,用1表示.机器人每次可以往四个方向 ...
- Uva1600 巡逻机器人
题目描述: 机器人从一个\(m\times n\)网格的左上角\((1,1)\)走到右下角\((m,n)\).网格中的一些格子是空地,用\(0\)表示,其他格子是障碍,用\(1\)表示.机器人每次可以 ...
- uva-1600 巡逻机器人
bfs判断visited最好还是在入栈之前,这道题的就算visited==true,但如果走过的'1'数量比较少的话,还是可以继续入栈的 #include <cstdio> #includ ...
- 工业机器人 郝卫东_智能保安巡逻机器人论文
第 1 页 共 5 页 智能保安巡逻机器人 黄海明 杨雷 宋跃 赖思沅 ( 东莞理工学院电子工程学院,广东 东莞 523808) 摘 要: 设计一个具有自动远程值守. GPRS 遥控. 远程监控等功能 ...
- 巡逻机器人(BFS)
巡逻机器人问题(F - BFS,推荐) Description A robot has to patrol around a rectangular area which is in a form ...
- 瓦力机器人故障维修_大眼萌!5G巡逻机器人亮相乌镇,24小时值守互联网大会...
大大的眼睛,方方的身体, 一台酷似"瓦力"的机器人 出现在互联网之光新展馆. 原来这是嘉兴公安的"新同事"-5G巡逻机器人,今天是它第一天上岗.这也是本次世界互 ...
- 纸板箱机器人制作比例图纸_造一个黄油机器人(Butter Robot)
上次制作了Rick的传送枪,这次我们来做个大一点的活,就是黄油机器人(Butter Robot)了. 我觉得一个Rick and Morty的粉丝兼一名Maker 一定会制作这一个剧中最受欢迎的机器人 ...
最新文章
- Zenoss Announces Monitoring for VMWare's Cloud Director
- python怎么删除特定文件_如何使用python从文件中删除特定行?
- 电脑如何进入bios模式_电脑如何进入bios关闭软驱
- java位宽_Java的数据类型
- java package 路径_java文件路径问题及Eclipse package,source folder,folder区别及相互转换...
- MySQL数据库中,将一个字段的值分割成多条数据显示
- Android开发框架整理
- deepin linux Qt无法输入中文
- xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用
- 【JavaSE基础】09-网络编程
- ISO 9000 族标准的构成
- 宁波中小学生计算机技术展示,宁波市第25届中小学生计算机程序设计竞赛复赛试题(小学组).doc...
- ZOOMIT的使用方法
- matlab实现基于DPCA密度峰值算法的图像分割
- AriaNG保存服务器信息,AriaNg
- 二阶常系数齐次线性微分方程通解的求取
- 域名防洪跳转html单页,域名防红跳转
- DevOps方法论掌握这四点,实践出真知
- centos 7安装podman(类似docker)
- 记一道MISC图片题(拖延癌晚期)