UVA1600 状态BFS
刚开是我用了一种很笨的bfs过掉的,后来看到原来还可以三维带状态BFS,觉得是一个不错的思路。
d[x][y][k]表示坐标位于(x,y)经过K个障碍到达时的最短路径,当然如果(x,y)处的数字是0就不用处理多个障碍的情况,因为第一次到达它一定是最短路径。
AC代码:
#include<cstdio> #include<cstring> #include<queue> #include<cstdlib> using namespace std; const int maxn=22; int d[maxn][maxn][maxn],G[maxn][maxn]; int n,m,k; const int dx[]={1,-1,0,0}; const int dy[]={0,0,1,-1}; struct node{ int x,y; //坐标 int dis; //经过了多少障碍 node(){ } node(int x,int y,int dis):x(x),y(y),dis(dis){ } }; int bfs(){ memset(d,-1,sizeof(d)); queue<node>q; d[0][0][0]=0; q.push(node(0,0,0)); while(!q.empty()){ node p=q.front(); q.pop(); int x=p.x,y=p.y,dis=p.dis; if(x==n-1&&y==m-1) return d[x][y][0]; for(int i=0;i<4;++i){ int px=x+dx[i],py=y+dy[i]; if(px<0||py<0||px>=n||py>=m) continue; if(G[px][py]==1){ if(dis>=k||d[px][py][dis+1]!=-1) continue; d[px][py][dis+1]=d[x][y][dis]+1; q.push(node(px,py,dis+1)); } else { if(d[px][py][0]!=-1) continue; d[px][py][0]=d[x][y][dis]+1; q.push(node(px,py,0)); } } } return -1; } int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d%d",&n,&m,&k); for(int i=0;i<n;++i) for(int j=0;j<m;++j){ scanf("%d",&G[i][j]); } int ans=bfs(); printf("%d\n",ans); } return 0; }
如有不当之处欢迎指出!
UVA1600 状态BFS的更多相关文章
- HDU 2209 翻纸牌游戏 状态BFS
翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem De ...
- 搜索(另类状态BFS):NOIP 华容道
描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...
- poj1753(位运算压缩状态+bfs)
题意:有个4*4的棋盘,上面摆着黑棋和白旗,b代表黑棋,w代表白棋,现在有一种操作,如果你想要改变某一个棋子的颜色,那么它周围(前后左右)棋子的颜色都会被改变(白变成黑,黑变成白),问你将所有棋子变成 ...
- 压状态bfs
一般地图很小,状态不多,可以装压或者hash,构造压缩或hash的函数,构造还原地图的函数,然后就无脑bfs(感觉就是SPFA) 题目: 1.玩具游戏:二进制压缩状态 #include<cstd ...
- Day1:T3 bfs T4 树形DP
T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min ...
- Gym - 100548H The Problem to Make You Happy 2014-2015 ACM-ICPC, Asia Xian Regional Contest (BFS+博弈)
题意:Bob和Alice在一张有向无环图上移动,给定二者的起点,Bob先手.Bob的失败条件是不能移动或者与Alice相遇.两个人都采取最优策略,求Bob是否会赢 分析:银牌题.先确定所有的失败状态, ...
- UESTC 485 Game(康托,BFS)
Today I want to introduce an interesting game to you. Like eight puzzle, it is a square board with 9 ...
- java数据结构_附12_图、顶点和边的定义(双链存储)
图--双链式存储结构 顶点 和 边 的定义 1.Vertex.java 2.Edge.java 3.AbstractGraph.java 1. public class Vertex {private ...
- B - Fill
Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Practice UV ...
随机推荐
- maven核心概念--生命周期
maven有一个命令,mvn package,该命令行并没有指定一个插件目标, 而是指定了一个Maven生命周期阶段.一个阶段是在被Maven称为"构建生命周期"中的一个步骤.生命 ...
- lambda高级进阶--返回函数
在函数式编程语言中,函数是一级公民.如同你可以将数字传递给方法,也可以让方法产生数字一样,函数不仅可以作为参数,也可以作为返回值.这听起来好像有点抽象,在JAVA编码中,我们好像也很少这样子写到,但是 ...
- ActiveMQ入门练习
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- Web Application和Web Site两个模板的比较
Scenario Web Application Project Web Site Project 项目定义 跟 Visual Studio .NET 2003 类似,由于项目文件的存在,只有被项目文 ...
- CentOS7修改主机名(hostname)
Linux中的hostname在大多数应用中至为重要,例如有些应用强制使用主机名称而不能使用IP地址,如果默认主机名称都为localhost.localdomain 的话那一定会出现问题,而且看起来也 ...
- linux命令读取文件中特定行
1.如果你只想看文件的前5行,可以使用head命令, 如: head -5 /etc/passwd 2.如果你想查看文件的后10行,可以使用tail命令, 如: tail -10 /etc/passw ...
- jQuery中的选择器及筛选器
1.jQuery的介绍 1.jQuery是继prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE! 2.它是轻量级的js库,这是其它的js库所不 ...
- Python基础篇(六)
retun空值,后面的语句将不再被执行 >>> def test(): ... print("just a test!") ... return .. ...
- 洛谷 [P2763]试题库问题
非常舒适的最大流 非常显然的建图方法,然而因为数组开小卡了很长时间 #include <iostream> #include <cstdio> #include <alg ...
- 洛谷4月月赛R2
洛谷4月月赛R2 打酱油... A.koishi的数学题 线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...