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 ...
随机推荐
- 查找最小的K个元素,使用最大堆。
查找最小的K个元素,使用最大堆,具体代码如下: #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace st ...
- 微软 Microsoft
微软(Microsoft Corporation) (NASDAQ:MSFT,港交所:4338),是一家基于美国的跨国电脑科技公司,是世界PC(Personal Computer,个人计算机)机软件开 ...
- call-template和apply-templates
对xml模板 来说,name属性是很关键的 call-template /apply-template 的name必须要和模板的name相对应.模板相当于一个函数,可以暂时这么看.而name相当于函数 ...
- CapsLock indicator on Ubuntu for Thinkpad
http://askubuntu.com/questions/292535/how-to-get-caps-num-scroll-lock-keys-osd-notification sudo add ...
- 转:理解Java泛型
JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进.但是,对于初次使用泛型类型的用户来说,泛型的某些方面看起来可能不容易明白,甚至非常奇怪.在本月的“Java 理论和实践”中 ...
- awk--动作(action)
摘要 在awk--简述中我们讲到awk是由pattern-action组合而成的,关于pattern我们已经awk--模式(pattern)在讲述,接下来就来看下awk的action. 动作是什么 我 ...
- EasyUEFI
---------------------------------http://www.easyuefi.com/downloads/EasyUEFI_Setup.exe--------------- ...
- Object -C NSSet -- 笔记
// // main.m // NSSET // // Created by facial on 25/8/15. // Copyright (c) 2015 facial_huo. All ...
- 设计模式19---设计模式之状态模式(State)(行为型)
1.场景模拟 考虑一个在线投票的应用,分为四种情况 正常投票 正常投票以后还继续重复投票 用户恶意投票 黑名单用户 2.不用模式的解决方案 package demo17.state.example1; ...
- Android开发系列之button事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...