博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1915-Knight Moves (单向BFS && 双向BFS 比)
阅读量:5892 次
发布时间:2019-06-19

本文共 1769 字,大约阅读时间需要 5 分钟。

主题链接:

题意:8个方向的 马跳式走法 ,已知起点 和终点,求最短路

研究了一下双向BFS,不是非常难,和普通的BFS一样。双向BFS只是是从 起点和终点同一时候開始搜索,可降低搜索时间

当两条搜索路线相遇时,结束。

貌似有一年百度的招聘 笔试,就是双向BFS。

。。。

以下,比較一下BFS 和 双向BFS的用时。

BFS

STL的queue可能会浪费一点时间

#include 
#include
#include
#include
#include
const int N = 310;using namespace std;int mapp[N][N];bool vis[N][N];struct node{ int x,y,ans;};int n;int mv[8][2] = {
{1,2},{1,-2},{2,1},{2,-1},{-2,1},{-2,-1},{-1,2},{-1,-2}};void BFS(int sx,int sy,int ex,int ey){ queue
q; node t,f; memset(vis,0,sizeof(vis)); f.x = sx; f.y = sy; f.ans = 0; vis[sx][sy] = true; q.push(f); while(!q.empty()) { t = q.front(); q.pop(); if(t.x==ex && t.y==ey) { printf("%d\n",t.ans); return ; } for(int i = 0;i<8;i++) { f.x = t.x + mv[i][0]; f.y = t.y + mv[i][1]; if(!vis[f.x][f.y]&& 0<=f.x && f.x
双向BFS

时间差的不是非常大,可是理论上,时间复杂度会降低若干倍。假设数据大的话,时间差会非常明显

#include 
#include
#include
#include
#include
const int N = 310;using namespace std;int mapp[N][N];int vis[N][N];struct node{ int x,y;};int n;int mv[8][2] = {
{1,2},{1,-2},{2,1},{2,-1},{-2,1},{-2,-1},{-1,2},{-1,-2}};int dis[N][N];void BFS(int sx,int sy,int ex,int ey){ if(sx==ex && sy == ey) { printf("0\n"); return ; } queue
q; node t,f; memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); f.x = sx; f.y = sy; t.x = ex; t.y = ey; vis[sx][sy] = 1; //从起点開始搜索的路线 标记为1 vis[ex][ey] = 2; //从终点開始搜索的路线 标记为2 q.push(f); q.push(t); while(!q.empty()) { t = q.front(); q.pop(); for(int i = 0;i<8;i++) { f.x = t.x + mv[i][0]; f.y = t.y + mv[i][1]; if(0<=f.x && f.x

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
1.备忘录模式
查看>>
Html学习笔记3
查看>>
杭州见闻
查看>>
What is Xeround?
查看>>
[转载]jQuery上传插件Uploadify使用详解
查看>>
算法学习的轨迹(转)
查看>>
asmx-web-service-basic-authentication
查看>>
Excel转换成图片的操作方法
查看>>
MFC中读取和设置文件状态
查看>>
分页显示
查看>>
iOS中安全结束 子线程 的方法
查看>>
批处理学习笔记8 - 深入学习For命令1
查看>>
Object-c学习之路二(oc内存管理黄金法则1)
查看>>
python开发_python文件操作
查看>>
iPhone 已停用
查看>>
CSS3之边框图片border-image
查看>>
图片轮换cycle插件的运用
查看>>
【Oracle】两个表Join关联更新
查看>>
ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN
查看>>
Eclipse console文本换行
查看>>