Obtener posiciones adyacentes de una matriz en Java

Hola a todos, hoy os voy a explicar como podemos obtener posiciones adyacentes de una matriz en Java.

Cuando tratamos una matriz, puede que necesitemos obtener las posiciones que hay alrededor de una posición concreta, conocido como las posiciones adyacentes.

Vamos a ir haciendo una función donde obtengamos las posiciones adyacentes de una posición concreta.

Le pasamos las filas y columnas que tiene la matriz, asi no tenemos que pasarle las de un tipo concreto, asi no es necesario hacer una función para cada tipo (se podría hacer). También, le pasamos la fila y columna de origen donde partimos.

Devolveremos una matriz de x filas de 2 columnas.

Lo primero sería comprobar que la fila y columna de origen están dentro de la matriz. en caso de que no sea correcto, devolvemos un null, también se podría devolver una excepción. Lo hacemos asi:

Ahora, debemos calcular cuántas posiciones adyacentes tenemos, podremos tener 3, 5 o 8. Veamos algunos ejemplos:

En la posición 0 0 de una matriz, sus posiciones adyacentes son 0 1, 1 0 y 1 1 (3 posiciones).

En la posición 0 1 de una matriz, sus posiciones adyacentes son 0 0, 0 2, 1 0, 1 1 y 1 2 (5 posiciones).

En la posición 1 1 de una matriz, sus posiciones adyacentes son 0 0, 0 1, 0 2, 1 0, 1 2, 2 0, 2 1 y 2 2 (8 posiciones).

Lo podemos representar en código de esta forma:

Creamos nuestra matriz y recorremos de -1 a 1 con dos bucles para hacer las combinaciones. Eso sí, debemos tener en cuenta que la posición 0 0 debemos de obviarla. Al final solo devolvemos la matriz de posiciones.

Veamos un ejemplo de ejecución:

El resultado es el siguiente:

Os dejo el código completo:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539