UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)
非常适合A*的一道题。
比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量。
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int MAX = ; int m,n,k; int C[MAX][MAX][MAX];
int G[MAX][MAX]; int tarx,tary;
struct node
{
int g,h;
int x,y;//对于本题 x+y 越大距离终点越近
int k;
bool operator < (const node& rhs) const{
if(g + h > rhs.g + rhs.h) return true;
if(g + h < rhs.h + rhs.g ) return false;
if(g > rhs.g) return true;
if(g < rhs.g) return false;
return k > rhs.k;
}
void H(){
h = tarx - x+ tary - y;
}
}; node start; #define C(n) C[n.x][n.y][n.k]
#define add(n) C(n) = true
int dx[] = { , , ,-};
int dy[] = { , ,-, }; int bfs()
{
priority_queue<node> q;
memset(C,false,sizeof(C));
q.push(start); add(start);
node cur,nxt;
int i,nx,ny,nk;
while(q.size()){
cur = q.top();q.pop();
if(cur.x == tarx && cur.y == tary) return cur.g;
for(i = ; i < ; i++){
nx = cur.x + dx[i];
ny = cur.y + dy[i];
if(nx >= m || nx < || ny >= n || ny < )continue;
nk = G[nx][ny] ? cur.k+ : ;
if(C[nx][ny][nk] || nk > k) continue;
nxt.x = nx ; nxt.y = ny; nxt.g = cur.g+ ; nxt.k = nk ; nxt.H();
q.push(nxt); add(nxt);
}
}
return -;
} int main()
{
// freopen("in.txt","r",stdin);
int T;
int i,j;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&m,&n,&k);
for(i = ;i < m; i++)
for(j = ;j < n; j++)
scanf("%d",G[i]+j);
tarx = m-;tary = n-;
start.x = start.y = start.g = start.k = ;
//start.H();
printf("%d\n",bfs());
}
return ;
}
UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)的更多相关文章
- UVA 1600 Patrol Robot(机器人穿越障碍最短路线BFS)
UVA 1600 Patrol Robot Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- UVA - 1600 Patrol Robot (巡逻机器人)(bfs)
题意:从(1,1)走到(m,n),最多能连续穿越k个障碍,求最短路. 分析:obstacle队列记录当前点所穿越的障碍数,如果小于k可继续穿越障碍,否则不能,bfs即可. #pragma commen ...
- 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)
题意: 给定一个n*m的图, 有一个机器人需要从左上角(1,1)到右下角(n,m), 网格中一些格子是空地, 一些格子是障碍, 机器人每次能走4个方向, 但不能连续穿越k(0<= k <= ...
- UVa 1600 Patrol Robot (BFS最短路 && 略不一样的vis标记)
题意 : 机器人要从一个m * n 网格的左上角(1,1) 走到右下角(m, n).网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示).机器人每次可以往4个方向走一格,但不能连续地穿越k( ...
- UVA 1600 Patrol Robot
带状态的bfs 用一个数(ks)来表示状态-当前连续穿越的障碍数: step表示当前走过的步数: visit数组也加一个状态: #include <iostream> #include & ...
- Uva 1600 Patrol Robot (BFS 最短路)
这道题运用的知识点是求最短路的算法.一种方法是利用BFS来求最短路. 需要注意的是,我们要用一个三维数组来表示此状态是否访问过,而不是三维数组.因为相同的坐标可以通过不同的穿墙方式到达. #inclu ...
- UVa 1600 Patrol Robot【BFS】
题意:给出一个n*m的矩阵,1代表墙,0代表空地,不能连续k次穿过墙,求从起点到达终点的最短路的长度 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰到墙,当前的k减去1,碰到0, ...
随机推荐
- 初步使用redis
1.导入jar包 2.新建类: public class JedisAdapter { private static final Logger logger = LoggerFactory.getLo ...
- 在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?
Sql2005中,提供了uniqueidentifier 数据类型.说白了,就是个GUID,这种类型开发时倒是很有必要的. 今天程序中遇到了这个问题:表里定义了一个uniqueidentifier 列 ...
- 使用HTML辅助方法载入分部视图
在webform中我们用过user control可以减少重复代码也利于将页面模组化, 在mvc中 叫分部视图 Partial View. 也就是一个片段的view.可以利用Partial vie ...
- Oracle数据库恢复之resetlogs
实验环境:RHEL 5.4 + Oracle 11.2.0.3 如果是一名合格的Oracle DBA,对resetlogs这种关键字都应该是极其敏感的,当确认需要这种操作时一定要三思而后行,如果自己不 ...
- 给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。
题目描述 给出每个员工每年薪水涨幅超过5000的员工编号emp_no.薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列. 提示:在s ...
- Unity ShadowMapping
原理: 场景中一个plane,一个cube,一个light,一个mainCamera 为了在plane上呈现cube的shadow,先在light上放一个lightCamera(位置方向跟light相 ...
- birt启动后访问地址详解
发布设计完成的报表文件,可在web项目中创建reports目录,用于存放报表设计文件. 在应用中通过正确格式的访问路径,例如:http://localhost:8080/birtApp/framese ...
- JMeter(2) 集成jmeter+ant+jenkins
一.ant安装 $su root $vi /etc/bashrc 插入两行(i+enter插入) export ANT_HOME=/usr/local/apache-ant-1.9.3 export ...
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C
It's that time of the year, Felicity is around the corner and you can see people celebrating all aro ...
- HDU1296 Polynomial Problem
http://acm.hdu.edu.cn/showproblem.php?pid=1296 随手练习 #include <bits/stdc++.h> using namespace s ...