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 ...
随机推荐
- change([[data],fn]) 当元素的值发生改变时,会发生 change 事件。
change([[data],fn]) 概述 当元素的值发生改变时,会发生 change 事件.大理石平台价格表 该事件仅适用于文本域(text field),以及 textarea 和 select ...
- [POI2008]BLO-Blockade 割点
[POI2008]BLO-Blockade 割点 题面 容易想到用\(\text{Tarjan}\)求割点.对于非割点,会损失\(2\times(n-1)\)次访问(注意是互相访问,所以要乘2):对于 ...
- P1106 删数问题 自己码风好菜
一个人的码风好坏究竟会影响多少
- Window操作系统_根据端口查看进行PID 并杀掉进程
Windows 如何查看本地端口被进程占用的情况? 传送门 Windows 根据端口查看进行PID 并杀掉进程[推荐] 传送门 转载目的:做JavaWeb项目时总提示我80/8080端口号被占用... ...
- slax linux的定制
由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...
- RAFT选举算法-分布式数据库困惑
在做HIS研发工作的时候一直想完善其数据组件,想做一个分布式的数据库支持系统.但一直以来都不清楚这个选举算法应怎么做,原来有一个叫raft的算法https://www.cnblogs.com/just ...
- Java排序之归并排序
Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...
- iOS-VideoToolbox硬编码H264
前言 VideoToolBox是iOS8之后,苹果开发的用于硬解码编码H264/H265(iOS11以后支持)的API. 对于H264还不了解的童鞋一定要先看下这边的H264的简介. 编码流程 我们实 ...
- legend3---13、vue是真的好用
legend3---13.vue是真的好用 一.总结 一句话总结: 下次前端所有的交互页面都可以用vue 1.chrome查看post请求携带的参数? 请求的Headers里面的Form Data里面 ...
- 从 10.x 到 ArcGIS Pro 的 Python 迁移
与 ArcGIS Pro 结合使用 Python 的方式与包括 ArcGIS Desktop.ArcGIS Server 以及 ArcGIS Engine 在内的其他 ArcGIS 产品不同. 地理处 ...