UVA1600 巡逻机器人 Patrol Robot
首先这道题的意思就是,你走到没有障碍的地方,你连续穿越的障碍数就是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相关推荐
- 习题6-5 UVA1600 巡逻机器人 Patrol Robot
难度:4 稍微难一点的bfs,以前数组的bfs都是用二维,来记录这个点入过队没有,但是题目加了一个条件,那就是最多连续穿墙不超过一个数,那么这就又是一维状态,加一维来表示到这个点连续穿墙的次数,也就是 ...
- 简单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 一定会制作这一个剧中最受欢迎的机器人 ...
最新文章
- 网络营销外包专员浅析从用户角度出发如何完善网络营销外包?
- 11gR2 RAC启用iptables导致节点宕机问题处理
- vivado烧写FPGA速度调节
- wxpython的sizer_wxPython BoxSizer布局
- java response 输出流_java-springmvc+filter 替换输出流、response、响应内容
- 大数据如何改善社会治理:国外“大数据社会福祉”运动的案例分析和借鉴
- 毕业进行时:人生的二次选择
- wifi6路由器使用tcpdump抓包
- Codeforces Gym 100015B Ball Painting 找规律
- 勒让德函数C语言编程设计,用递归方法求n阶勒让德多项式的值
- jadx 1.4.5反编译包不全
- 前端移动端页面与手机尺寸和分辨率的关系
- android手机整体规模,2021年Android手机市场规模
- 微信小程序 17 个人中心和登录 的跳转
- android 广告库sdk,GitHub - adxdata/sdk-android-demo: 美数广告SDK(Android)示例
- pdf会签_设备验收管理办法20140604(会签签批版).pdf
- 前端PC端微信扫码登录
- 程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)
- 【蓝桥杯c++(Python)每日练习】每日刷题day10:小雨妹的游泳时间,小雨妹的平均数
- 实用教程 | 00—网易邮箱大师(APP与电脑版)均可收发谷歌Gmail邮件。