备战蓝桥杯第八模块之搜索

前言

本系列是我学习完大佬的方法后,为了蓝桥杯前几天可以快速过一遍所做,所以部分内容会很简洁。如果能够帮助到你,我也会很开心!!!

DFS

经典题目:

八皇后问题

迷宫

判断图的连通性

模版

(根据题目适当变换)步骤:先看看有没有满足条件(满足则退出),然后遍历循环,标记被用过,根据具体题目修改条件,遍历下一层并回溯

bool vis[N]
void dfs(int x)
{
    if (u == n)//如果满足条件
    {
        //输出结果
        return;
     }

        for (int i = 1; i <= n; i++)
        {
            if (vis[i])//判断有没有被用过
                continue;
            vis[i] = true;//标记用过
            a[x] = i;//修改状态
            dis(x + 1);//遍历下一层
            vis[i] = false;//回溯
        }
     }
}

BFS

经典题目:

最短路径问题

辅助结构

队列

void bfs( )
{
    
    while (队列不为空)
    {
         取出队头元素 队头元素出队
        for (int i = 0; i < n; i++
        {
            if(等于目标状态)
            {

            }
        }

    }
}

双向广搜

思想就是从两端开始遍历,然后从离得比较远的先开始遍历


int bfs(string A, string B)
{
    ......//弄出两个队列来
    while (pa.size()&&pb.size())
    {
        if(pa.size()<=pb.size())
       //正向搜索
       else
       //反向搜索
    }
}

迭代加深搜索

使用场景:层数很多,但是答案在层数比较少的时候

思路:首先要设置一个搜索深度,从1开始,然后每次进行搜索,如果找到想要的值时就输出,如果没有的话就开始增加搜索深度

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值