俩月前写的普通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();}
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532451.html

POJ1915 BFS双向BFS相关推荐

  1. LeetCode 127. 单词接龙(图的BFS/双向BFS)

    文章目录 1. 题目 2. 图的BFS解题 2.1 单向BFS 2.2 双向BFS !厉害了 1. 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord ...

  2. BFS、双向BFS和A*

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

  3. HDU 1043 Eight(双向BFS+康托展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...

  4. 算法提高课-搜索-双向广搜 AcWing 190. 字串变换:bfs、双向bfs、queue和unordered_map

    题目分析 来源:acwing 分析: 双向广搜主要用在最小步数模型(也称状态图模型)里面,这里整个状态空间一般是指数级别的,用双向广搜可以极大地提高运行效率. 双向广搜,顾名思义,就是从起点和终点都进 ...

  5. 浅谈迷宫搜索类的双向bfs问题(例题解析)

    文章目录 前言 bfs类问题 双向bfs 例题实战 前言 文章若有疏忽还请指正,更多精彩还请关注公众号:bigsai 在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,b ...

  6. [题解](双向bfs)hdu_3085_Nightmare Ⅱ

    发现直接搜索比较麻烦,但是要同时两个人一起走容易想到双向bfs,比较普通, 在判断是否碰到ghost时只要比较两点的曼哈顿距离大小和step*2(即ghost扩散的距离)即可,仔细思考也是可以想到的 ...

  7. HDU - 3085 Nightmare Ⅱ(双向bfs)

    题目链接:点击查看 题目大意:给出一个迷宫,一个男孩和一个女孩还有两只鬼,男孩每秒钟走3格,女孩每秒钟走1格,鬼每秒钟向四周分裂2格,问男孩和女孩能否在鬼占领迷宫之前汇合,能的话输出汇合时间,否则输出 ...

  8. UVA1601The Morning after Halloween 单向加双向bfs

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

  9. [蓝桥杯][历届试题]九宫重排-双向bfs和map标记

    题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...

最新文章

  1. FPGA(2)基础语法 -- 按键控制led(alway@语句)
  2. python之互斥锁
  3. 使用opencv dnn 模块调用darknet模型时候出错,不支持relu激活函数
  4. 【MM】需求类型清单
  5. go reflect的用法
  6. excel 行高 上下留白_拒绝加班,工作中最常用的57个Excel小技巧来了!
  7. 【电设控制与图像训练题】【激光打靶】【openmv测试代码以及效果】
  8. Zabbix 3.0 配置企业微信报警(配置zabbix-web)
  9. implicit request ?
  10. 介绍个好点的,JAVA技术群
  11. hibernate连接成功
  12. php的curl选项curlopt,CURLOPT_NOBODY选项,php中文手册中坑爹的翻译!
  13. java课程设计计算器 uml简图,计算器的用例建模
  14. linux下github使用教程,Linux下git操作GitHub步骤教程
  15. 请问如何提高文件的读写速度
  16. Java的编程之旅——idea上新建文件
  17. 51假期读书笔记(上)——流畅的python
  18. java开发hadoop报错误 java.net.UnknownHostException
  19. PPT述课怎样倒计时
  20. 苹果Mac系统快捷键 mac新手必看

热门文章

  1. python安装pip-安装pip的三种方法
  2. LeetCode week252
  3. hdu1799 循环多少次?(组合递推公式的使用)
  4. TextSwitcher的使用(一)
  5. vue 按需加载,换存,导航守卫
  6. HDU2094 产生冠军
  7. nlopt 二次优化
  8. 错误---获取Input的值为空字符串
  9. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针...
  10. int ,long , long long类型的范围