广度优先搜索主要用了队列(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用来保存每次搜索得到的结果