DFS模板
这是一篇关于DFS深度优先搜索算法的总结笔记
DFS思想
DFS模板
#include <iostream>
using namespace std;
/**
*DFS思想:一直往深处走,直到找到解或者走不下去为止
*实现:采用递归,使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。
*该DFS框架以2D坐标范围为例,来体现DFS算法的实现思想。
*/
const int maxn=100;
bool vst[maxn][maxn]; // 访问标记
int map[maxn][maxn]; // 坐标范围
int dir[4][2]={{0,1}, {0,-1}, {1,0}, {-1,0}}; // 方向向量,(x,y)周围的四个方向:dir[0]上,dir[1]下,dir[2]右,dir[3]左
bool CheckEdge(int x,int y) // 边界条件和约束条件的判断
{
if(!vst[x][y]) // 该节点之前没被访问过,满足条件,可访问
return 1;
else // 与约束条件冲突
return 0;
}
void dfs(int x,int y)
{
vst[x][y]=1; // 标记该节点被访问过
if(map[x][y] == 1) // 出现目标态G
{
// 做相应处理
return;
}
for(int i=0;i<4;i++) //遍历(x, y)上下左右四个方向进行搜索
{
if(CheckEdge(x+dir[i][0],y+dir[i][1])) // 按照规则生成下一个节点
dfs(x+dir[i][0],y+dir[i][1]);
}
return; // 没有下层搜索节点,回溯
}
int main()
{
return 0;
}
欢迎转载,欢迎错误指正与技术交流,欢迎交友谈心
文章标题:DFS模板
文章字数:358
本文作者:Brain Cao
发布时间:2018-04-08, 16:03:01
最后更新:2020-02-22, 16:03:37
原始链接:https://braincao.cn/2018/04/08/dfs-template/版权声明:本文为博主原创文章,遵循 BY-NC-SA 4.0 版权协议,转载请保留原文链接与作者。