Cómo resolver el problema de las islas en una matriz 3D

Podríamos usar DFS o BFS para recorrer toda la cuadrícula y luego marcar la celda visitada como ‘v’ para asegurarnos de que no la volvamos a visitar. Intento simplemente esta pregunta. En mi siguiente código, supongo que todas las islas adyacentes conectadas se forman 2D horizontalmente, 2D verticalmente y 3D verticalmente. Por lo tanto, solo configuro seis direcciones en mi código (verifique la matriz dx, dy, dz). Le invitamos a expandir estos arreglos para obtener más direcciones (tal como Akshay mencionó, 26 direcciones).

public int numIslands (grilla char [] [] []) {
int cuenta = 0;
for (int i = 0; i <grid.length; i ++) {
for (int j = 0; j <grid [0] .length; j ++) {
for (int k = 0; k <grid [0] [0] .length; k ++) {
if (grilla [i] [j] [k] == ‘1’) {
recuento ++;
dfs (cuadrícula, i, j, k);
}
}
}
}
cuenta de retorno;
}

dfs privado vacío (char [] [] [] grid, int x, int y, int z) {
if (x> = grid.length || x <0
|| y> = cuadrícula [0] .length || y <0
|| z> = cuadrícula [0] [0] .length || z <0
|| cuadrícula [x] [y] [z]! = ‘1’) {
regreso;
}

cuadrícula [x] [y] [z] = ‘v’;
int [] dx = {1, -1, 0, 0, 0, 0};
int [] dy = {0, 0, 1, -1, 0, 0};
int [] dz = {0, 0, 0, 0, 1, -1};
for (int i = 0; i <dx.length; i ++) {
dfs (cuadrícula, x + dx [i], y + dy [i], z + dz [i]);
}
}

Lo más simple sería utilizar algo como un algoritmo de relleno de inundación basado en cola mientras se copia la matriz y se mantiene un contador basado en 1 para el valor de relleno. El valor final del contador será el número de regiones en la matriz multidimensional. También deberá mantener un mapa de bits para realizar un seguimiento de los nodos visitados.

Simplemente llame a un DFS / BFS en un no visitado 1 y la cantidad de veces que llame a BFS / DFS será la cantidad de islas.

La única diferencia en 3D será que en 2D solo tenía 8 vecinos, pero ahora tiene 26.

More Interesting

¿En Java es tan fácil manejar la interfaz de usuario como en JavaScript?

Cómo convertirse en un arquitecto de software con un título no CS

¿Cómo puede un ingeniero de software ordinario obtener una oferta de las compañías de Big Tech? Competí en algunas competencias de programación similares al ACM-ICPC, pero solo llegué al nivel nacional y no al internacional.

¿Cuáles son los mejores equipos de ingenieros de software en Google?

¿Los ingenieros de software de nivel básico generalmente realizan poco trabajo, que en su mayoría son correcciones de errores y agregan una pequeña funcionalidad?

¿Cómo es trabajar como ingeniero de software para la CIA o la NSA?

Soy ingeniero de software sénior. ¿12 años de experiencia laboral anulan un GPA bajo de pregrado cuando solicitan una Maestría en Ciencias Comp en universidades del Reino Unido?

Para un currículum interno de ingeniero de software, ¿cómo describiría que sabe cómo usar Linux y la línea de comandos?

¿Cómo es ser un pasante de ingeniería de software en SoundCloud?

¿Cuáles son los 3 mejores deben tener cualidades de un gran programador?

¿Puedes conseguir un trabajo de programador sin un título universitario (y si tu especialidad es negocios y no informática)? ¿En qué idioma debes aprender tu primer concierto de programación? ¿Y qué títulos de empleo buscarías en los sitios de búsqueda de empleo?

¿Qué deben saber los ingenieros de software sobre las computadoras cuánticas?

Cómo evaluar la madurez de un equipo de ingeniería de software

Siendo un ingeniero de software experto en la última tecnología (IoT / AI), ¿qué puedo hacer para regresar a mi ciudad natal donde no tengo esas oportunidades?

¿Pueden los ingenieros de software ser astronautas?