首页 📐算法 深度优先遍历
文章
取消

📐算法 深度优先遍历

1.方法总结💡

1
2
1️⃣通过两次for循环 遍历grid二维数组 根据题意进入递归
2️⃣进入递归体后对 边界和遍历过位置return 最后进行上下左右的移动

2.适用题型🎯

1
1️⃣岛屿类的题目-求岛屿面积、周长、数量

3.注意点❗

1
2
1️⃣DFS本质是递归-尤其注意递归结束的条件 if(i<0||i>=row||j<0||j>=col||grid[i][j]!=1) return;
2️⃣注意审题 看进入递归的条件是什么 不要犯经验主义的错误 1进入还是0 进入 1是陆地还是0是 陆地

4.模板🔑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
    int res;//根据需要记录答案
    int row;//行
    int col;//列
    public int numEnclaves(int[][] grid) {

         row= grid.length;
         col = grid[0].length;

        //特殊处理 例如:边界0/1的情况要处理

        for(int i =0;i<row;i++){
            for(int j=0;j<col;j++){
                if(grid[i][j]==1){ //是陆地就进入
                    res++; //按题目要求统计
                    dfs(i,j,grid);//进行深度遍历
                }
            }
        }

        return res;

    }
     public void dfs(int i,int j,int[][] grid) {
         //越界和重复判断
        if(i<0||i>=row||j<0||j>=col||grid[i][j]!=1) return;

		//遍历过的就设置成别的数
        grid[i][j] = 0;

         //向下遍历
        dfs(i-1,j,grid);
        dfs(i+1,j,grid);
        dfs(i,j+1,grid);
        dfs(i,j-1,grid);
    }
}

5.经典题目📝

岛屿问题🥥

130. 被围绕的区域

200. 岛屿数量

463. 岛屿的周长

695. 岛屿的最大面积

1020. 飞地的数量

1254. 统计封闭岛屿的数目

本文由作者按照 CC BY 4.0 进行授权

📐算法 回溯

🚀数据结构 二叉树