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 ...
随机推荐
- 006_FreeRTOS其他API函数
(一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...
- python while for 语句
while 语句: >>> x = >>> : ... x += ... print(x) ... for 语句: >>> words = ['a ...
- *51nod 1409
https://blog.csdn.net/stay_accept/article/details/81476358 不懂啊 #include <map> #include <que ...
- 数据结构实验之数组三:快速转置(SDUT 3347)
Problem Description 转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它 ...
- ETL定义、四大模块及子系统说明
ETL定义.四大模块及子系统说明 ——<Pentaho Kettle解决方案>读书笔记 罗小川 目前公司正在进行数据仓库的建设的前期需求整理和项目启动阶段,想简单来谈一下自己对目前公司在用 ...
- List的子类特点
List的子类特点: ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 ...
- 互联网IT当线上出现 bug 时,是怎么处理的?
线上BUG说处理方法:1.关于线上BUG问题,目前公司有一整套线上故障流程规范,包括故障定义.定级.处理流程.故障处理超时升级机制.故障处理小组.故障处罚(与故障存在时长有关)等:2.最主要的是,线上 ...
- python定时任务实现
安装 pip install schedule 示例代码 import schedule import time def job(): print("I'm working..." ...
- 重读APUE(7)-link/unlink与mkdir/rmdir
link–用于创建一个现有文件的链接:实际上是新建一个目录项,指向当前文件的i节点: unlink–用于删除一个现有文件的连接:实际上是对引用i节点的目录项进行删除,并且对链接计数-1:系统会检查文件 ...
- EEPROM与FLASH
最初的ROM rom最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉. 人类文明不断进步,终于出现了可多次擦除写入的EPROM, ...