Modelo de pesquisa em profundidade

Modelo de pesquisa em profundidade

Exemplos típicos e exemplos de programas

Um exemplo típico é 695. A área máxima da ilha O
código de amostra é o seguinte

private int m, n;
private int[][] direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

public int maxAreaOfIsland(int[][] grid) {
    if (grid == null || grid.length == 0) {
        return 0;
    }
    m = grid.length;
    n = grid[0].length;
    int maxArea = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            maxArea = Math.max(maxArea, dfs(grid, i, j));
        }
    }
    return maxArea;
}

private int dfs(int[][] grid, int r, int c) {
    if (r < 0 || r >= m || c < 0 || c >= n || grid[r][c] == 0) {//判断合法性
        return 0;
    }
    grid[r][c] = 0;//标记已访问
    int area = 1;
    for (int[] d : direction) {//领域搜索与业务计算
        area += dfs(grid, r + d[0], c + d[1]);
    }
    return area;
}

Sumário

De fato, muitos problemas de DFS podem ser resolvidos com as mesmas rotinas na parte de pesquisa de DFS, então aqui está um breve registro resumido
1. Primeiro, crie um if para julgar a legitimidade, filtre os casos que não atendem às condições e o julgamento de legitimidade aqui Geralmente, é necessário julgar se foi visitado. De fato, é para filtrar os elementos ilegais e visitados no bairro
2. Em seguida, marque o elemento atual como visitado
3. A pesquisa de domínio é recursiva e o cálculo de negócios é realizado ao mesmo tempo.

Acho que você gosta

Origin www.cnblogs.com/wunsiang/p/12717839.html
Recomendado
Clasificación