题目链接: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)的更多相关文章

  1. POJ1915Knight Moves(单向BFS + 双向BFS)

    题目链接 单向bfs就是水题 #include <iostream> #include <cstring> #include <cstdio> #include & ...

  2. HDU 3085 Nightmare II 双向bfs 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=3085 出的很好的双向bfs,卡时间,普通的bfs会超时 题意方面: 1. 可停留 2. ghost无视墙壁 3. ...

  3. POJ 3170 Knights of Ni (暴力,双向BFS)

    题意:一个人要从2先走到4再走到3,计算最少路径. 析:其实这个题很水的,就是要注意,在没有到4之前是不能经过3的,一点要注意.其他的就比较简单了,就是一个双向BFS,先从2搜到4,再从3到搜到4, ...

  4. [转] 搜索之双向BFS

    转自:http://www.cppblog.com/Yuan/archive/2011/02/23/140553.aspx 如果目标也已知的话,用双向BFS能很大程度上提高速度. 单向时,是 b^le ...

  5. 双向BFS

    转自“Yuan” 如果目标也已知的话,用双向BFS能很大提高速度 单向时,是 b^len的扩展. 双向的话,2*b^(len/2)  快了很多,特别是分支因子b较大时 至于实现上,网上有些做法是用两个 ...

  6. HDU 3085 Nightmare Ⅱ (双向BFS)

    Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. HDU 3085 Nightmare Ⅱ 双向BFS

    题意:很好理解,然后注意几点,男的可以一秒走三步,也就是三步以内的都可以,鬼可以穿墙,但是人不可以,鬼是一次走两步 分析:我刚开始男女,鬼BFS三遍,然后最后处理答案,严重超时,然后上网看题解,发现是 ...

  8. POJ 3126 Prime Path 解题报告(BFS & 双向BFS)

    题目大意:给定一个4位素数,一个目标4位素数.每次变换一位,保证变换后依然是素数,求变换到目标素数的最小步数. 解题报告:直接用最短路. 枚举1000-10000所有素数,如果素数A交换一位可以得到素 ...

  9. Hdu1401-Solitaire(双向bfs)

    Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered ...

随机推荐

  1. change([[data],fn]) 当元素的值发生改变时,会发生 change 事件。

    change([[data],fn]) 概述 当元素的值发生改变时,会发生 change 事件.大理石平台价格表 该事件仅适用于文本域(text field),以及 textarea 和 select ...

  2. [POI2008]BLO-Blockade 割点

    [POI2008]BLO-Blockade 割点 题面 容易想到用\(\text{Tarjan}\)求割点.对于非割点,会损失\(2\times(n-1)\)次访问(注意是互相访问,所以要乘2):对于 ...

  3. P1106 删数问题 自己码风好菜

    一个人的码风好坏究竟会影响多少

  4. Window操作系统_根据端口查看进行PID 并杀掉进程

    Windows 如何查看本地端口被进程占用的情况? 传送门 Windows 根据端口查看进行PID 并杀掉进程[推荐] 传送门 转载目的:做JavaWeb项目时总提示我80/8080端口号被占用... ...

  5. slax linux的定制

    由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...

  6. RAFT选举算法-分布式数据库困惑

    在做HIS研发工作的时候一直想完善其数据组件,想做一个分布式的数据库支持系统.但一直以来都不清楚这个选举算法应怎么做,原来有一个叫raft的算法https://www.cnblogs.com/just ...

  7. Java排序之归并排序

    Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...

  8. iOS-VideoToolbox硬编码H264

    前言 VideoToolBox是iOS8之后,苹果开发的用于硬解码编码H264/H265(iOS11以后支持)的API. 对于H264还不了解的童鞋一定要先看下这边的H264的简介. 编码流程 我们实 ...

  9. legend3---13、vue是真的好用

    legend3---13.vue是真的好用 一.总结 一句话总结: 下次前端所有的交互页面都可以用vue 1.chrome查看post请求携带的参数? 请求的Headers里面的Form Data里面 ...

  10. 从 10.x 到 ArcGIS Pro 的 Python 迁移

    与 ArcGIS Pro 结合使用 Python 的方式与包括 ArcGIS Desktop.ArcGIS Server 以及 ArcGIS Engine 在内的其他 ArcGIS 产品不同. 地理处 ...