UVA 1600 Patrol Robot
带状态的bfs
用一个数(ks)来表示状态-当前连续穿越的障碍数;
step表示当前走过的步数;
visit数组也加一个状态;
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std; const int maxn = ; struct node {
int x,y;
int step;
int ks;
void init (int nx,int ny,int nstep,int nks){
x=nx;y=ny;step=nstep;ks=nks;
}
}; int n,m,k;
int map[maxn][maxn],visit[maxn][maxn][maxn];
int dir[][]={,,-,,,,,-}; int bfs (){
queue<node> q;
while (!q.empty ())
q.pop ();
node a,b;
a.init (,,,);
q.push (a);
while (!q.empty ()){
a=q.front ();
q.pop (); int xx,yy,sstep,kss;
for (int i=;i<;i++){
xx=a.x;yy=a.y;sstep=a.step;kss=a.ks;
xx+=dir[i][];
yy+=dir[i][];
sstep+=;
if (xx<||xx>n||yy<||yy>m)
continue ;
if (map[xx][yy])
kss++;
else kss=;
if (kss>k)
continue ;
if (visit[kss][xx][yy])
continue ;
if (xx==n&&yy==m)
return sstep ;
b.init (xx,yy,sstep,kss);
q.push (b);
visit[kss][xx][yy]=;
}
}
return -;
} int main (){
int t;
cin>>t;
while (t--){
cin>>n>>m>>k;
if (n==m&&n==){
cout<<<<"error"<<endl;
continue ;
}
memset (visit,,sizeof visit);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
cin>>map[i][j];
int ans=bfs ();
cout<<ans<<endl;
}
return ;
}
UVA 1600 Patrol Robot的更多相关文章
- UVA 1600 Patrol Robot(机器人穿越障碍最短路线BFS)
UVA 1600 Patrol Robot Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- UVa 1600 Patrol Robot (习题 6-5)
传送门: https://uva.onlinejudge.org/external/16/1600.pdf 多状态广搜 网上题解: 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰 ...
- UVa 1600 Patrol Robot(三维广搜)
A robot has to patrol around a rectangular area which is in a form of m x n grid (m rows and ncolumn ...
- UVa 1600 Patrol Robot (BFS最短路 && 略不一样的vis标记)
题意 : 机器人要从一个m * n 网格的左上角(1,1) 走到右下角(m, n).网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示).机器人每次可以往4个方向走一格,但不能连续地穿越k( ...
- Uva 1600 Patrol Robot (BFS 最短路)
这道题运用的知识点是求最短路的算法.一种方法是利用BFS来求最短路. 需要注意的是,我们要用一个三维数组来表示此状态是否访问过,而不是三维数组.因为相同的坐标可以通过不同的穿墙方式到达. #inclu ...
- UVa 1600 Patrol Robot(BFS)
题意: 给定一个n*m的图, 有一个机器人需要从左上角(1,1)到右下角(n,m), 网格中一些格子是空地, 一些格子是障碍, 机器人每次能走4个方向, 但不能连续穿越k(0<= k <= ...
- UVa 1600 Patrol Robot【BFS】
题意:给出一个n*m的矩阵,1代表墙,0代表空地,不能连续k次穿过墙,求从起点到达终点的最短路的长度 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰到墙,当前的k减去1,碰到0, ...
- UVA - 1600 Patrol Robot (巡逻机器人)(bfs)
题意:从(1,1)走到(m,n),最多能连续穿越k个障碍,求最短路. 分析:obstacle队列记录当前点所穿越的障碍数,如果小于k可继续穿越障碍,否则不能,bfs即可. #pragma commen ...
- 【UVa】1600 Patrol Robot(dfs)
题目 题目 分析 bfs可以搞,但是我还是喜欢dfs,要记忆化不然会T 代码 #include <cstdio> #include <cstring> #inc ...
随机推荐
- Scala 编程(一)Scala 编程总览
Scala 简介 Scala 属于“可伸展语言”,源于它可以随使用者的需求而改变和成长.Scala 可以应用在很大范围的编程任务上,小到脚本大到建立系统均可以. Scala 跑在标准 Java 平台上 ...
- Selenium索引
Common Selenium各种工具比较 Selenium firefox 版本问题 Selenium IDE Selenium IDE整理 WebDriver Java 版本 Selenium开始 ...
- java cmd常用命令
熟悉Java的常用命令 面试例题11:使用jar命令. 请使用jar命令,将test文件夹压缩成.jar文件,并简述其压缩包的结构. 考点:对于Java程序员来说,更多情况下是使用集成Java开发工具 ...
- android PreferenceScreen使用笔记
preference.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen ...
- MySQL批量更新死锁案例分析--转载
问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackE ...
- Java设计模式---组合模式
一.组合模式定义 组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite ...
- HTML5中class选择器属性的解释
设置有class属性值的元素,可以被css中的选择器调用,也可以在javascript中以getElementsByClassName()方法调用. 可以给各个元素添加class而且名称可以相同与id ...
- 秒味课堂Angular js笔记------过滤器
不同过滤器的小demo. currency number uppercase json limitTo date orderBy filter <script> var filterMy ...
- HTML 控件和web控件 OnClientClick和OnClick OnServerClick区别
^_^ 本来对html控件,服务器控件的知识模模糊糊的.今天特地查了相关的知识. 下面是我写代码总结的. 这些事件 主要用于在客户端执行验证,然后决定是否执行服务端事件 (没接触之前就为此 ...
- 第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析
1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根V ...