200. Número de ilhas

Descrição do título:

Dê a você uma grade bidimensional composta por '1' (terra) e '0' (água); por favor, conte o número de ilhas na grade.

As ilhas estão sempre cercadas por água e cada ilha só pode ser formada por conexões terrestres adjacentes horizontais e / ou verticais.

Além disso, você pode assumir que todos os quatro lados da grade estão cercados por água.

Exemplo 1:

Entrada:
11110
11010
11000
00000
Saída: 1
Exemplo 2:

Entrada:
11000
11000
00100
00011
Saída: 3
Explicação: Cada ilha só pode ser formada conectando-se à terra horizontal e / ou verticalmente adjacente.

Pensamento:

Pesquisa em profundidade: quando [i, j] for '1', aumente o número de ilhas e use a pesquisa em profundidade para definir todas as grades próximas a [i, j] de 1 a '0'

Código:

solução de classe {
 private :
     void dfs (vetor <vetor < char >> & grid, int i, int j) {    // ,没有 返回 值 用 void , 并且 grid 要 引用
        int cols = grid [ 0 ] .size ();
        int linhas = grid.size (); 
        grade [i] [j] = ' 0 ' ;
        if (i- 1 > = 0 && grid [i- 1 ] [j] == ' 1 ' ) dfs (grade, i- 1 , j);
        if (i + 1 <linhas && grade [i +1 ] [j] == ' 1 ' ) dfs (grade, i + 1 , j);
        if (j- 1 > = 0 && grid [i] [j- 1 ] == ' 1 ' ) dfs (grade, i, j- 1 );
        if (j + 1 <colunas && grade [i] [j + 1 ] == ' 1 ' ) dfs (grade, i, j + 1 ); 
    } 
public :
     int numIslands (vetor <vetor < char >> & grade) {
         int count = 0 ;
        intlinhas = grid.size ();
        if (linhas == 0 )    // 情况 判断 输入 为 空 的 情况
            return count;
        int cols = grade [ 0 ] .size ();
        for ( int i = 0 ; i <linhas; i ++ )
             for ( int j = 0 ; j <colunas; j ++ ) {
                 if (grade [i] [j] == ' 1 ' ) { 
                    count ++ ; 
                    dfs (grade, i, j); 
                } 
            } 
        Returncontagem; 
    } 
};

 

Acho que você gosta

Origin www.cnblogs.com/thefatcat/p/12743723.html
Recomendado
Clasificación