poj1915(双向bfs)
题目链接:https://vjudge.net/problem/POJ-1915
题意:求棋盘上起点到终点最少的步数。
思路:双向广搜模板题,但玄学的是我的代码G++会wa,C++过了,没找到原因QAQ。。
AC代码:
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; const int maxn=;
int go[][]={-,,-,,,,,,,-,,-,-,-,-,-};
int T,n,sx,sy,ex,ey,vis1[maxn][maxn],vis2[maxn][maxn]; struct node{
int x,y,s;
node():x(),y(),s(){}
node(int x,int y,int s):x(x),y(y),s(s){}
}; int bfs(){
vis1[sx][sy]=vis2[ex][ey]=;
queue<node> que1,que2;
que1.push(node(sx,sy,));
que2.push(node(ex,ey,));
while(!que1.empty()||!que2.empty()){
if(!que1.empty()){
node now=que1.front();que1.pop();
int nx=now.x,ny=now.y,ns=now.s;
if(vis2[nx][ny]>=){
return ns+vis2[nx][ny];
}
for(int i=;i<;++i){
int xx=nx+go[i][],yy=ny+go[i][];
if(xx<||xx>n||yy<||yy>n||vis1[xx][yy]>=) continue;
vis1[xx][yy]=ns+;
que1.push(node(xx,yy,ns+));
}
}
if(!que2.empty()){
node now=que2.front();que2.pop();
int nx=now.x,ny=now.y,ns=now.s;
if(vis1[nx][ny]>=){
return ns+vis1[nx][ny];
}
for(int i=;i<;++i){
int xx=nx+go[i][],yy=ny+go[i][];
if(xx<||xx>n||yy<||yy>n||vis2[xx][yy]>=) continue;
vis2[xx][yy]=ns+;
que2.push(node(xx,yy,ns+));
}
}
}
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
vis1[i][j]=vis2[i][j]=-;
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
++sx,++sy,++ex,++ey;
if(sx==ex&&sy==ey)
printf("0\n");
else
printf("%d\n",bfs());
}
return ;
}
poj1915(双向bfs)的更多相关文章
- POJ1915Knight Moves(单向BFS + 双向BFS)
题目链接 单向bfs就是水题 #include <iostream> #include <cstring> #include <cstdio> #include & ...
- HDU 3085 Nightmare II 双向bfs 难度:2
http://acm.hdu.edu.cn/showproblem.php?pid=3085 出的很好的双向bfs,卡时间,普通的bfs会超时 题意方面: 1. 可停留 2. ghost无视墙壁 3. ...
- POJ 3170 Knights of Ni (暴力,双向BFS)
题意:一个人要从2先走到4再走到3,计算最少路径. 析:其实这个题很水的,就是要注意,在没有到4之前是不能经过3的,一点要注意.其他的就比较简单了,就是一个双向BFS,先从2搜到4,再从3到搜到4, ...
- [转] 搜索之双向BFS
转自:http://www.cppblog.com/Yuan/archive/2011/02/23/140553.aspx 如果目标也已知的话,用双向BFS能很大程度上提高速度. 单向时,是 b^le ...
- 双向BFS
转自“Yuan” 如果目标也已知的话,用双向BFS能很大提高速度 单向时,是 b^len的扩展. 双向的话,2*b^(len/2) 快了很多,特别是分支因子b较大时 至于实现上,网上有些做法是用两个 ...
- HDU 3085 Nightmare Ⅱ (双向BFS)
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3085 Nightmare Ⅱ 双向BFS
题意:很好理解,然后注意几点,男的可以一秒走三步,也就是三步以内的都可以,鬼可以穿墙,但是人不可以,鬼是一次走两步 分析:我刚开始男女,鬼BFS三遍,然后最后处理答案,严重超时,然后上网看题解,发现是 ...
- POJ 3126 Prime Path 解题报告(BFS & 双向BFS)
题目大意:给定一个4位素数,一个目标4位素数.每次变换一位,保证变换后依然是素数,求变换到目标素数的最小步数. 解题报告:直接用最短路. 枚举1000-10000所有素数,如果素数A交换一位可以得到素 ...
- Hdu1401-Solitaire(双向bfs)
Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered ...
随机推荐
- MNIST 数据集介绍
在学习机器学习的时候,首要的任务的就是准备一份通用的数据集,方便与其他的算法进行比较. MNIST数据集是一个手写数字数据集,每一张图片都是0到9中的单个数字,比如下面几个: MNIST数据库 ...
- left
left 语法: left: auto | <length> | <percentage> 默认值:auto 适用于:定位元素.即定义了 <' position '> ...
- Cogs 1345. [ZJOI2013] K大数查询(树套树)
[ZJOI2013] K大数查询 /* 树套树写法. bzoj过不了. 可能有负数要离散吧. 线段树套线段树. 外层权值线段树,内层区间线段树维护标记. 对权值建一棵权值线段树. 某个点表示权值在某个 ...
- bbs-admin-自定义admin(二)
本文内容 目的:模仿admin默认配置,自定义配置类 一 查 1 查看数据 2 查看表头 3 分页器 4 search(搜索框) 5 action(批量处理) 6 filter(分类) ...
- redis系列(二):数据操作
1.string类型 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中 ...
- 第2组 Alpha冲刺(3/4)
17-材料-黄智(252342126) 22:10:46 队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:写博客,复习C语言 GitHub签入记录 接下来的计划:构思游戏实现 还剩 ...
- C语言学习笔记10-结构体、枚举、联合体
C语言学习笔记10-结构体.枚举.联合体 待传
- 3-自定义构造方法和description方法
http://www.cnblogs.com/mjios/archive/2013/04/19/3031412.html -自定义构造方法和description方法 1 默认的构造方法是什么?有什么 ...
- vfork与fork的区别
vfork()用法与fork()相似,但是也有区别,具体区别归结为以下3点: 1. fork():子进程拷贝父进程的数据段,代码段.vfork():子进程与父进程共享数据段. 2. fork():父子 ...
- Linux设备驱动程序 之 后备高速缓存
设备驱动程序常常会反复的分配很多相同大小的内存块:内核实现了后备高速缓存来对此进行支持,以反复的使用这些相同的内存块: 创建 Linux内核的高速缓存管理有时被称为“slab分配器”:因此,相关函数和 ...