[JS] Resolução de problemas | #Número de ilhas#

Resolução de problemas | #Número de ilhas#

link do tópico

número de ilhas


Descrição do tópico

Limite de tempo: 1 segundo Limite de espaço: 256M

descrever

Dada uma matriz 01, 1 representa terra, 0 representa oceano, se dois 1s são adjacentes, então os dois 1s pertencem à mesma ilha. Consideramos apenas cima, baixo, esquerda e direita como adjacentes.
Ilha: Terra adjacente pode formar uma ilha (adjacente: cima, baixo, esquerda e direita) Determine o número de ilhas.

Por exemplo:

entrar

[
[1,1,0,0,0],
[0,1,0,1,1],
[0,0,0,1,1],
[0,0,0,0,0],
[ 0,0,1,1,1]
]

A saída correspondente é

3

Exemplo 1

entrar:

[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]

valor de retorno:

3

Exemplo 2

entrar:

[[0]]

valor de retorno:

0

Exemplo 3

entrar:

[[1,1],[1,1]]

valor de retorno:

1

Observação:

01 Faixa de matriz <=200*200


Ideias para resolver problemas

Um método de tingimento muito típico, execute dfs em cada ponto, tinga totalmente os pontos adjacentes com um valor de 1 e use soma para registrar o valor de tingimento atual.

Resumindo, a primeira ilha é totalmente corada como -1, a segunda ilha é totalmente corada como -2 e, finalmente, o inverso do maior número negativo é a resposta correta.

Usar um dfs fará o truque.


código de resolução de problemas

/**
 * 判断岛屿数量
 * @param grid string字符串型二维数组 
 * @return int整型
 */
function solve(grid) {
    
    
    // write code here
    // grid = [[1, 1, 0, 0, 0], [0, 1, 0, 1, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 1, 1, 1]];
    let col = grid.length;
    let row = grid[0].length;
    let sum = 0;
    let dfs = (x, y) => {
    
    
        if (grid[x][y] == 1) {
    
    
            grid[x][y] = sum;
        }
        let tox = x + 1;
        let toy = y;
        if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
    
    
            dfs(tox, toy);
        }
        tox = x - 1;
        toy = y;
        if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
    
    
            dfs(tox, toy);
        }
        tox = x;
        toy = y + 1;
        if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
    
    
            dfs(tox, toy);
        }
        tox = x;
        toy = y - 1;
        if (tox >= 0 && tox < col && toy >= 0 && toy < row && grid[tox][toy] == 1) {
    
    
            dfs(tox, toy);
        }
        return;
    }
    for (let i = 0; i < col; i++) {
    
    
        for (let j = 0; j < row; j++) {
    
    
            if (grid[i][j] == 1) {
    
    
                sum--;
                dfs(i, j);
            }
        }
    }
    sum = sum < 0 ? -sum : sum;
    return sum;
}


Acho que você gosta

Origin blog.csdn.net/qq_36286039/article/details/123271159
Recomendado
Clasificación