本人小白,这是该账号的第一篇文章,开场白到此。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最近在看《啊哈 算法》这本书,在第4章中介绍了DFS算法
DFS算法框架如下
void dfs(int step){
判断边界
for(int i=0;i<=n;i++)循环尝试每种可能{
book[i]=1;
尝试下一步dfs(step+1)
book[i]=0;
}
return;
}
尝试每种可能的过程中我们经常使用book数组判断该节点是否被访问过,并且在下一次尝试之后需要将所涉及的book数组中的节点位置归零。
在对本书后续问题的阅读当中,笔者发现book[i]=0似乎可以省去
笔者给出对于 “book[i]=0” 可以省去的一些条件:
1.大部分DFS都会需要book[i]归零;
2.是否需要归零取决于该节点在同一次搜索中是否可以被重复访问。
DFS算法由斯坦福大学John E.Hopcroft和Robert E.Tarjan发明。
无论是否需要book[i]=0这一条件:
DFS算法都保证了图的连通性(任意两点能否互相访问)和图的平面性(图中所有边不交叉)