一、原理
深度优先搜索再得到一个新节点时立即对新节点进行遍历,从节点 0 出发开始遍历,得到到新节点 6 时,立马对新节点 6 进行遍历,得到新节点 4;如此反复以这种方式遍历新节点,直到没有新节点了,此时返回。返回到根节点 0 的情况是,继续对根节点 0 进行遍历,得到新节点 2,然后继续以上步骤。
从一个节点出发,使用DFS对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,DFS常用来解决这种 可达性 问题。
实现:递归栈(保存当前节点信息,当遍历新节点返回时能继续遍历当前节点)、标记(对已经遍历过的节点进行标记)。
二、应用
数组:
思路:对于没有被访问过且为‘1’的单元格,进行深度优先搜索,搜索过程中更新访问状态数组
class Solution {
int[][] dir=new int[][]{
{-1,0},{0,1},{1,0},{0,-1}};
boolean[][] visited;
int m,n;
public int numIslands(char[][] grid) {
m=grid.