Esto se puede hacer mediante una simple búsqueda bfs o dfs. Otra forma que sugirió Miguel Oliveira es contar la cantidad de componentes conectados
Aquí está mi enfoque.
public int countNumberOfOnes (char [] [] grid) {
if (grid == null || grid.length == 0) {
devuelve 0;
}
int M = grid.length;
int N = grid [0] .length;
int cuenta = 0;
booleano [] [] visitado = nuevo booleano [M] [N];
- Cómo resolver la fórmula de combinación para n
- Al escribir una cadena binaria de longitud 20 usando 10 1s y 10 0s, puede que nunca haya más 0s que 1s en un momento dado. ¿Cuántas cuerdas existen?
- Si hay N personas en una fila, y cada hora mata al azar a una persona con un índice impar, y los sobrevivientes vuelven a indexar, ¿quién tendrá más probabilidades de sobrevivir?
- Cómo entender por qué el algoritmo de Euclides para GCD es verdadero
- ¿Son los teoremas algo más que axiomas contorneados?
para (int fila = 0; i <M; fila ++) {
para (int col = 0; col <N; col ++) {
if (! visitó [fila] [col] && grid [fila] [col] == ‘1’) {
visita (cuadrícula, fila, columna, visitado);
recuento ++;
}
}
}
cuenta de retorno;
}
visita privada vacía
char [] [] grid, int row, int col, boolean [] [] visitado) {
visitado [fila] [col] = verdadero;
// mueve una fila debajo
if (isSafe (fila + 1, col, visitado, cuadrícula)) {
visita (cuadrícula, fila + 1, col, visitado);
}
// mueve una fila hacia atrás
if (isSafe (fila-1, col, visitado, cuadrícula)) {
visita (cuadrícula, fila-1, col, visitado);
}
// mover un frente de col
if (isSafe (fila, col + 1, visitado, cuadrícula)) {
visita (cuadrícula, fila, col + 1, visitado);
}
// mueve una columna detrás
if (isSafe (fila, col-1, visitado, cuadrícula)) {
visita (cuadrícula, fila, col-1, visitado);
}
}
booleano privado isSafe
(int row, int col, boolean [] [] visitado, char [] [] grid) {
fila de retorno> = 0
&& col> = 0
&& fila <grid.length
&& col <grid [0] .length
&&! visitó [fila] [col]
&& grid [fila] [col] == ‘1’;
}