20.4.20 Número medio de islas 200

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

  1. La idea es una búsqueda amplia, y se pueden entender las ideas generales del código;
  2. 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;
    }
};

Supongo que te gusta

Origin www.cnblogs.com/wasi-991017/p/12739720.html
Recomendado
Clasificación