
习题6-5 巡逻机器人(Patrol Robot, ACM/ICPC Hanoi 2006, UVa1600)
发布日期:2021-05-06 16:10:08
浏览次数:17
分类:原创文章
本文共 1239 字,大约阅读时间需要 4 分钟。
原题链接:
分类:图
备注:水题
代码如下:
#include<cstdio>#include<cstring>#include<queue>using namespace std;const int dir[4][2] = { { -1,0},{ 1,0},{ 0,-1},{ 0,1} };int T, m, n, k, vised[25][25][25], a[25][25];struct node { int row, col, sum, step; node(int x, int y, int n, int t) : row(x), col(y), sum(n), step(t) { }};bool check(int row, int col) { if (row<1 || row>m || col<1 || col>n)return false; return true;}int main(void) { scanf("%d", &T); while (T--) { memset(vised, 0, sizeof(vised)); scanf("%d %d %d", &m, &n, &k); for (int i = 1; i <= m; i++) for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]); node head(1, 1, 0, 0); queue<node>q; q.push(head); int ok = 0, sum; while (!q.empty()) { head = q.front(); q.pop(); if (head.row == m && head.col == n) { ok = 1; break; } for (int i = 0; i < 4; i++) { int row = head.row + dir[i][0]; int col = head.col + dir[i][1]; if (!check(row, col))continue; if (!a[row][col])sum = 0; else if ((sum = head.sum+1) > k)continue; if (vised[row][col][sum])continue; int step = head.step + 1; vised[row][col][sum] = 1; q.push(node(row, col, sum, step)); } } if (ok)printf("%d\n", head.step); else printf("-1\n"); } return 0;}
发表评论
最新留言
很好
[***.229.124.182]2025年04月06日 12时39分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Latex排版的时候把图片放在指定位置
2019-03-03
09-01 Java语言基础(package、import)
2019-03-03
11-01 Java语言基础(Scanner类)
2019-03-03
Hadoop_Scala操作Hbase
2019-03-04
STL教程:C++ STL快速入门(非常详细)
2019-03-04
【论文泛读03】卷积LSTM网络:一种短时降雨量预测的机器学习方法
2019-03-04
【学习笔记】欧拉函数,欧拉公式
2019-03-04
Python3序列
2019-03-04
React中设置404页面
2019-03-04
CSS总结div中的内容垂直居中的四种方法
2019-03-04
vue组件传参 props default 数组/对象的默认值应当由一个工厂函数返回
2019-03-04
Node.js response 页面中文乱码
2019-03-04
3D感知技术及实践
2019-03-04
北大读博手记:怎样完成自己的博士生涯?非常具有指导性!
2019-03-04
基于OpenCV实战:对象跟踪
2019-03-04
属性闭包求解算法——数据库考试复习
2019-03-04
poj3617
2019-03-04
java学习笔记24:文档注释与代码块
2019-03-04
java学习笔记31:Arrays类介绍使用
2019-03-04
java学习笔记36:Integer的基本方法
2019-03-04