首页 > 编程知识 正文

算法类问题的求解框架,dfs算法复杂度

时间:2023-05-06 19:12:27 阅读:156812 作者:3792

DFS算法框架一开始说的是BFS,但DFS是必不可少的~

算法分析DFS的全名是深度优先搜索,听了这个名字就知道,该算法一直是下面的“深度”搜索,思想是:一直往深处走,直到找到解或者走不下去为止

什么,等等,为什么和之前说的回溯算法很像? 没错,我感觉你没错。 其实这个DFS是回溯算法! 我建议同学直接翻一下我之前提到的回溯算法的博文。

voidDFS(Depth ) if )找到解||不能去了) .return; //列举以下情况的DFS(Depth1) : //没有以下情况。 请追溯返回; }这里就不多说了,直接上栗:遍历二维坐标

const int32_t maxn=100; bool visted[maxn][maxn]; //访问标记int 32 _ tpositionrange [ maxn ] [ maxn ]; //坐标范围int 32 _ t direction [ ] [2]={ 0,1,0,- 1,0,- 1,0 }; //方向向量,(x,y )周围的四个方向//边界条件和约束的判断满足boolcheckedge(int32_tx,int32_t y ) )//条件if (! visted[x][y] . ) { return true; } else { return false; }voidDFS(int32_tx,int32_t y ) { visted[x][y]=true; //标记该节点已被访问//目标状态gif(positionrange[x][y]==g ) )…//执行相应操作的返回; }for(int32_tI=0; i 4; I ) )//根据规则生成下一个节点,上面的左右4个点if(checkedge(xdirection[I][0],y direction [ I ] ) DFS ) x direction [ I ] //没有下层搜索节点,追溯(现在我们来拉一下DFS和BFS的本质区别:

DFS实际上就是实现类似于一个栈的操作,将节点按照深度优先的次序压栈,后面再以相反的次序出栈进行新的检测,实际上也就是递归实现之后的一个体现出来的特点。

BFS实际上就是实现一个队列的操作,将本节点处理完毕之后,再将周围相邻的节点入列,后面再依次遍历处理。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。