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 ...
随机推荐
- P3474 [POI2008]KUP-Plot purchase
思路:单调栈 提交:>5次 错因:单调栈写法有问题+前缀和写错 题解: 若有\(>=k\ \&\&\ <=2\times k\)的点,显然直接选他就行了. 否则,我们 ...
- JavaMail使用SMTP协议发送电子邮件(详解)
Properties props = new Properties(); props.setProperty("mail.transport.protocol", "sm ...
- el-form 表单校验
<el-form ref="dataForm" :model="dataForm" :rules="rules" label-widt ...
- 有向网络(带权的有向图)的最短路径Dijkstra算法
什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...
- jquery 页面input上传图后显示
<input type="file" id="otherfiles" name="otherfiles" class="up ...
- springboot中web应用的统一异常处理
在web应用中,请求处理过程中发生异常是非常常见的情况.springboot为我们提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异 ...
- storm java环境变量设置
storm启动时会加载conf/storm-env.sh文件 编辑 conf/storm-env.sh 添加export JAVA_HOME=/usr/java/jdk1.8.0_111
- Java并发指南2:深入理解Java内存模型JMM
本文转载自互联网,侵删 一:JMM基础与happens-before 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实 ...
- 第二章 c语言概述
一.#include指令和头文件 1.#include C预处理指令,C编译器在编译前对源代码做一些准备工作 2.stdio.h标准输入输出头文件,提供了关于输入输出的信息供编译器使用 头文件包含了建 ...
- Oracle JDBC 连接池
1.简介 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据 ...