前言
本系列是我学习完大佬的方法后,为了蓝桥杯前几天可以快速过一遍所做,所以部分内容会很简洁。如果能够帮助到你,我也会很开心!!!
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开始,然后每次进行搜索,如果找到想要的值时就输出,如果没有的话就开始增加搜索深度