俩月前写的普通BFS

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int CAS,sx,sy,k,ex,ey,vis[305][305],xx[]={1,-1,2,-2,1,-1,2,-2},yy[]={2,-2,1,-1,-2,2,-1,1};
bool check(int x,int y)
{
return x>=0&&x<k&&y>=0&&y<k;
}
int bfs()
{
queue <int> p,q;
p.push(sx),q.push(sy);
while(!p.empty())
{
int tempx=p.front(),tempy=q.front();
p.pop();q.pop();
if(tempx==ex&&tempy==ey) return vis[ex][ey];
for(int i=0;i<=7;i++)
{
if(!vis[tempx+xx[i]][tempy+yy[i]]&&check(tempx+xx[i],tempy+yy[i]))
{
vis[tempx+xx[i]][tempy+yy[i]]=vis[tempx][tempy]+1;
p.push(tempx+xx[i]),q.push(tempy+yy[i]);
}
}
}
}
int main()
{
scanf("%d",&CAS);
for(int ii=1;ii<=CAS;ii++)
{
memset(vis,0,sizeof(vis));
scanf("%d%d%d%d%d",&k,&sx,&sy,&ex,&ey);
cout<<bfs()<<endl;
}
}

双向搜索(自己yy的。。。随便搞一搞就AC了 我也不知道为什么。。):

#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int cases,dx,dy,k,sx,sy,ex,ey,xx[]={2,2,-2,-2,1,1,-1,-1},yy[]={1,-1,1,-1,2,-2,2,-2},vis[305][305],v[305][305];
queue<pair<int,int> >q;
pair<int,int>p;
int bfs(){
while(!q.empty()){
p=q.front();q.pop();
if(vis[p.first][p.second]==1)
for(int i=0;i<=7;i++){
dx=p.first+xx[i],dy=p.second+yy[i];
if(!vis[dx][dy]&&dx>=0&&dx<k&&dy>=0&&dy<k)v[dx][dy]=v[p.first][p.second]+1,vis[dx][dy]=1,q.push(make_pair(dx,dy));
else if(vis[dx][dy]==2)return v[dx][dy]+v[p.first][p.second];
}
else if(vis[p.first][p.second]==2)
for(int i=0;i<=7;i++){
dx=p.first+xx[i],dy=p.second+yy[i];
if(!vis[dx][dy]&&dx>=0&&dx<k&&dy>=0&&dy<k)v[dx][dy]=v[p.first][p.second]+1,vis[dx][dy]=2,q.push(make_pair(dx,dy));
else if(vis[dx][dy]==1)return v[dx][dy]+v[p.first][p.second];
}
}
}
int main()
{
scanf("%d",&cases);
for(int ii=1;ii<=cases;ii++){
memset(vis,0,sizeof(vis));
memset(v,0,sizeof(v));
scanf("%d%d%d%d%d",&k,&sx,&sy,&ex,&ey);
q.push(make_pair(sx,sy)),q.push(make_pair(ex,ey));
vis[sx][sy]=v[sx][sy]=1;vis[ex][ey]=2;
if(sx==ex&&sy==ey){printf("0\n");continue;}
printf("%d\n",bfs());
while(!q.empty())q.pop();
}
}

POJ1915 BFS&双向BFS的更多相关文章

  1. UVa 1601 || POJ 3523 The Morning after Halloween (BFS || 双向BFS && 降维 && 状压)

    题意 :w*h(w,h≤16)网格上有n(n≤3)个小写字母(代表鬼).要求把它们分别移动到对应的大写字母里.每步可以有多个鬼同时移动(均为往上下左右4个方向之一移动),但每步结束之后任何两个鬼不能占 ...

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

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

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

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

  4. UVA - 1601 The Morning after Halloween (BFS/双向BFS/A*)

    题目链接 挺有意思但是代码巨恶心的一道最短路搜索题. 因为图中的结点太多,应当首先考虑把隐式图转化成显式图,即对地图中可以相互连通的点之间连边,建立一个新图(由于每步不需要每个鬼都移动,所以每个点需要 ...

  5. bfs(双向bfs加三维数组)

    http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Time Limit: 3000/1000 MS (Java/Others)     ...

  6. BFS、双向BFS和A*

    BFS.双向BFS和A* Table of Contents 1. BFS 2. 双向BFS 3. A*算法 光说不练是无用的.我们从广为人知的POJ 2243这道题谈起:题目大意:给定一个起点和一个 ...

  7. 洛谷 P1379 八数码难题(map && 双向bfs)

    题目传送门 解题思路: 一道bfs,本题最难的一点就是如何储存已经被访问过的状态,如果直接开一个bool数组,空间肯定会炸,所以我们要用另一个数据结构存,STL大法好,用map来存,直接AC. AC代 ...

  8. 双向BFS和启发式搜索的应用

    题目链接 P5507 机关 题意简述   有12个旋钮,每个旋钮开始时处于状态 \(1\) ~ \(4\) ,每次操作可以往规定方向转动一个旋钮 (\(1\Rightarrow2\Rightarrow ...

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

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

随机推荐

  1. (5.2.1)配置服务器参数——即时文件初始化(IFI)

    关键词:零填充,即时文件初始化 转自:https://www.cnblogs.com/gaizai/p/3516905.html 概念: 所有新申请的空间,sql server都要以0来填充完磁盘文件 ...

  2. 【Apache Kafka】一、Kafka简介及其基本原理

      对于大数据,我们要考虑的问题有很多,首先海量数据如何收集(如Flume),然后对于收集到的数据如何存储(典型的分布式文件系统HDFS.分布式数据库HBase.NoSQL数据库Redis),其次存储 ...

  3. SqlServer 【基 本 操 作】

    1.Row_Number() select * from (select Row_Number() over (order by FSalary) as 'RowNum' ,* from dbo.T_ ...

  4. 最基础的rpm命令

    rpm -ivh package.rpm 安装一个rpm包 rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 rpm -U package.rpm 更新 ...

  5. Python MongoDB 教程

    基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...

  6. vue 使用插件

    上传加载 :vue-infinite-loading

  7. 【郑轻邀请赛 A】tmk射气球

    [题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2127 [题意] [题解] 把气球和飞艇所代表的直线投影到xoy面上 设气球所在位置为 ...

  8. [HDU1403]Longest Common Substring(后缀数组)

    传送门 求两个串的公共子串(注意,这个公共子串是连续的一段) 把两个串连在一起,中间再加上一个原字符串中不存在的字符,避免过度匹配. 求一遍height,再从height中找满足条件的最大值即可. 为 ...

  9. Aggressive Cows 二分

    Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are locat ...

  10. Linux: 统计代码行数和SVN修改行数的命令

    Mac下同样有效. 1. 统计目录下所有js文件的代码行数. find . -name '*.js' | xargs wc -l 2. 统计SVN的修改行数. svn diff -rBeginRev: ...