POJ1915 双向广度优先搜索

本文介绍了如何运用双向广度优先搜索(Bi-directional BFS)算法来解决POJ1915问题。该算法从初始状态和目标状态同时开始搜索,并在中间相遇时结束,常用于解决最短路径或最小成本问题。判断搜索状态是否相交可通过标记数组检查状态的访问情况,如在本题中,未访问状态标记为0,正向访问为1,逆向访问为2。
摘要由CSDN通过智能技术生成

双向广度优先搜索算法:初始状态(正向搜索)和目标状态(逆向搜索)同时向中间搜,当两个方向的搜索生成同一子状态时,搜索结束;一般用来解决最小等最优问题;

如何判断是否生成了同一子状态:(1)用标记数组,若某一状态未被遍历到,则为0,正向遍历到为1,逆向遍历到为2,当遍历到某一状态时,判断一下其对应标记数组的值;(2)本题(poj1915)代码;

#include<cstdio>
#include<iostream>
#include<queue>;
using namespace std;
#define Maxn 309
struct node
{
    int x,y;
};//坐标节点
int n;//图的大小
int fstep[Maxn][Maxn],bstep[Maxn][Maxn];//记录正向搜索和逆向搜索步数
int dir[8][2] = {-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2};
bool isok(node a)
{
    if (a.x < 0 || a.x >= n || a.y < 0 || a.y >= n)
        return false;
    return true;
}
int BBFS(node a,node b)
{
    if (a.x == b.x && a.y == b.y)
    {
        return 0;
    }//如果起点和终点一样,则返回0
    int i,j;
    queue<node>q1,q2;
    for (i = 0; i &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值