hdu1195 Open the lock 双向广度优先搜索

本文详细介绍了如何使用C++编写D-BFS算法,从两个起点(s和e)同时开始搜索,找到并输出两点之间的最短路径。代码展示了如何处理节点、队列操作以及路径标记。

在这里插入图片描述
D-BFS 双向广度优先搜索
从起点和终点同时开始搜索,直到两个搜索的点相交,得到最短路径
Code:

// D-BFS
//by:MuQY
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <string>
using namespace std;
int stmap[10005]; // 标记每一个情况下走了几步
int vis[10005];   // 标记每个情况下有没有被访问过,是正向还是逆向
string s, e;
struct Node
{
   
   
    int num[4];
    int step;
};
queue<Node> q, p; // q从s开始,p从e开始
int get_Num(int c[])
{
   
   
    int tmp = 0;
    for (int i = 0; i < 4; i++)
    {
   
   
        tmp *= 10;
        tmp += c[i];
    }
    return tmp;
}
void bfs()
{
   
   
    memset(vis, 0, sizeof(vis));
    memset(stmap, 0, sizeof(stmap));
    Node a, b;
    int tmp;
    while (!q.empty() || !p.empty())
    {
   
   
        if (!q.empty()){
   
   
            a = q.front();
            q.pop();
            for (int i = 0; i < 4; i++){
   
   
                b = a;
                b.num[i] = a.num
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值