DFS入门
这两天刚刚接触DFS,做了相关的三个题,感触良多,写篇博客,加深印象。
DFS即为深度搜索,是图论题中寻找通路或者寻找图中某部分连通块的惯用手段。
在图中访问完某个点后,以递归的方式访问该点附近未访问过的定点(以标记的方法判断是否访问过)。
DFS又分回溯型和不回溯型。
回溯型用于寻找多个单元格组成的连通块,若不连通则不标记;或者在寻找通路时,如果走到的这个单元格无法进一步运动了,则回溯到上一步,该单元格取消标记。
不回溯型仅用于标记,只要满足条件都可标记,可用于寻找连通块(单个单元格也算作连通块时)。
DFS的递归算法在应用时是套模板的。
模板:
//布尔型数组Visited[]初始化成false void DFS(Vetex v) { Visited[v] = true; for each w adjacent to v// 伪代码,即寻找与v有关的点w, adjacent仅表示题目中的两点间连通的条件。 if (!Visited[w]) DFS(w); }