【初学算法】广度优先搜索做题心得(C++)

本文探讨了使用广度优先搜索(BFS)的算法思想,通过队列数据结构来保证搜索的顺序。文章以一道具体的LeetCode题目为例,解释如何利用BFS解决字符串操作问题,同时避免重复搜索已处理的节点,并处理不可设置的密码。最后展示了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

广度优先搜索主要用了队列(queue)这种数据结构先进数据后出的性质
主要思想是将每一步搜索出的数据排成一个队列,这样排出来的队列可以保证同一深度的数据在队列的连续空间中线性排列从而可以保证每次可以同一批次处理相同的深度的所有数据(广度优先)从而能稳定的找到想要搜索的数据的深度
下面给出一个例题:
(题目来自:https://leetcode-cn.com/explore/learn/card/queue-stack/217/queue-and-bfs/873/)
在这里插入图片描述
(题目给出的答案模板)

class Solution {
public:
    int openLock(vector<string>& deadends, string target) {
        
    }
};

考虑到这道题可以用广度优先搜索解决
考虑到直接操作字符串比较繁琐且代码可读性会下降很多于是设置两个内联函数

    inline string Add(string num,int index)
	{
		num[i] = (num[i] - 47) % 10 + 48;
		return num;
	}
	inline string Sub(string num,int index)
	{
		num[i] = (num[i] - 39) % 10 + 48;
		return num;
	}

这样间接达到向前拨和向后拨密码的效果
用广度优先搜索时我们需要一个节点队列queue< string > nodes用来保存每次搜索得到的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值