俩月前写的普通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. 如何从源码启动和编译IoTSharp

    IoTSharp 项目是一个开源物联网平台,数据库使用PostgreSQL , 后端使用 Asp.Net Core 2.2 ,前端使用  vue-element-admin , 下面我们介绍如何启动项 ...

  2. CAD把一个DWG文件中的多个图框一次性全部插入到打开的DWG文件中

    主要用到函数说明: _DMxDrawX::InsertBlock 向控件数据库中插入一个图块,不用它插入匿名块,详细说明如下: 参数 说明 BSTR pszDwgFileName 图块定义的dwg 文 ...

  3. Python之进程 基础知识 上

    阅读目录 理论知识 操作系统背景知识 什么是进程 进程调度 进程的并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 在python程序中的进程操作 multiprocess模块 进程的创建和mu ...

  4. resize监听div的size变化

    具体实现分两类, ie9-10 默认支持div的resize事件,可以直接通过div.attachEvent('onresize', handler);的方式实现 其它浏览器 通过在div中添加一个内 ...

  5. 11.11如何卖到一个亿:从0到1的电商爆品打造术 电子书 PDF

    内容转自:https://download.csdn.net/download/chenyao1994/11191034 下载地址:https://pan.baidu.com/s/1uQ1cjm9QH ...

  6. hdu 4876

    ZCC loves cards Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. enote笔记语言(4)

    what:我想知道某个“关键词(keyword)”(即,词语,可以是概念|专业术语|.......)的定义. why:我想知道事物发生的原因:我会不会犯“归因错误”?是“单因素”的还是“多因素”的原因 ...

  8. 面试:A

    分析 System.Collections.Generic.List<T> 的 Remove<T> 方法和 Clear 方法的实现细节(不允许使用“移除”“清除”这种概念模糊的 ...

  9. BOM对象和DOM对象

    一.BOM对象 BOM(Browser Object Model)是指浏览器对象模型,可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其他与页面内容不直接相 ...

  10. 用Twebbrowser做可控编辑器与MSHTML(插入表格)

    在插入表格问题上出现与结果想象不一样的问题.看代码 <table border="1" cellpadding="0" width="100%& ...