Titulo
Proporcione una cuadrícula bidimensional compuesta de '1' (tierra) y '0' (agua), cuente el número de islas en la cuadrícula.
Las islas siempre están rodeadas de agua, y cada isla solo puede estar formada por conexiones terrestres adyacentes horizontales y / o verticales.
Además, puede suponer que los cuatro lados de la cuadrícula están rodeados de agua.
Ejemplo 1:
Entrada:
11110
11010
11000
00000
Salida: 1
Ejemplo 2:
Entrada:
11000
11000
00100
00011
Salida: 3
Explicación: Cada isla solo puede formarse conectando tierra adyacente en dirección horizontal y / o vertical.
Ideas para resolver problemas
- La idea es una búsqueda amplia, y se pueden entender las ideas generales del código;
- El punto principal es establecer esto en 0. La reducción a cero es equivalente a la visita, es decir, los puntos que se han visitado se ponen a cero. Tenga en cuenta que debe establecerse en cero cuando se presiona, y es incorrecto restablecerlo cuando aparece. Porque cuando aparece un punto, buscará 1 de las cuatro direcciones de este punto, y luego lo colocará en la cola, lo que causará un bucle infinito bajo ciertas circunstancias, porque es posible poner un punto en la cola varias veces.
Código
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
if(!grid.size()) return 0;
queue<pair<int,int>> bfs;
int count=0;
for(int i=0; i<grid.size(); i++){
for(int j=0; j<grid[0].size(); j++){
if(grid[i][j]=='1'){
count++;
bfs.push({i,j});
grid[i][j]='0';
while(!bfs.empty()){
pair<int,int> pairIndex=bfs.front();
bfs.pop();
int row=pairIndex.first, col=pairIndex.second;
if(row!=0 && grid[row-1][col]=='1'){
bfs.push({row-1,col});
grid[row-1][col]='0';
}
if(col!=0 && grid[row][col-1]=='1'){
bfs.push({row,col-1});
grid[row][col-1]='0';
}
if(row<grid.size()-1 && grid[row+1][col]=='1'){
bfs.push({row+1,col});
grid[row+1][col]='0';
}
if(col<grid[0].size()-1 && grid[row][col+1]=='1'){
bfs.push({row,col+1});
grid[row][col+1]='0';
}
}
}
}
}
return count;
}
};