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; } };