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 ...
随机推荐
- SQL server 分离数据库与删除数据库的区别
今天,在sql server 中,分离数据库,然后就问了一下,与删除数据库的区别 区别在于(百度一下): 分离后,.mdb和.log文件都在,以后你需要用的时候,还可以用附加数据库的方法加上去,分离数 ...
- g++ gcc 的区别
我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链 接用g++,一时也不知哪个说法正确,如果再遇上个ext ...
- CSU 1021 从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下: C(m, n) = m!/((m - n)!n!) 现在请问,如果将组合数C(m, n)写成二进制数,请问转这个二进制数末尾有多少个零。
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/B 解题思路:这个题目就是求因子的个数, m!/((m ...
- Spring 3.2 ClassMetadataReadingVisitor 错误
nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.clas ...
- motan源码分析二:使用spi机制进行类加载
在motan的源码中使用了很多的spi机制进行对象的创建,下面我们来具体分析一下它的实现方法. 1.在实际的jar包的\META-INF\services目录中引入相关的文件,例如下图中,我解压了co ...
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
最终效果如下: 实现ScrollView主要是NGUI的三个脚本"UIDraggable Panel","UIGrid","UIDrag Panel ...
- 数字信号处理Day2-小波基与规范正交化
我们有这么一张灰度图64*64 我们能够定义出4096个基,各自是某一位是0其它是1,在这样的情况下,假设我们传输图片,那么就相当于传输原始数据 如果传到一半,网络坏了. 于是,我们得到 我们能够计算 ...
- setWillNotDraw和setFillViewport
Romain Guy write a little info about a ScrollView attribute that is missing from documentation : An ...
- 怎样将关系型数据表转换至hbase数据表
首先须要把关系型数据库的数据表的数据添加由 "纵向延伸",转变为HBase数据表的"横向延伸" 一.Hbase的存储结构 a) HBase以表(HTa ...
- CSDN挑战编程——《数学问题》
数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<=100: 设S=max{x1*a1+x2*a2+x ...