Olá quero solicitar ajuda para o entendimento no conceito de visitação de vizinhos em matrix. Tenho o exemplo do código abaixo mas estou com dificuldade de entender. Se houver outra sugestão de algoritmos considerando simplicidade e performance agradeço.
public class MatrizNavegacao {
static final int[] dx = {-1, 1, 0, 0}; // cima, baixo, esquerda, direita
static final int[] dy = {0, 0, -1, 1};
public static void main(String[] args) {
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int x = 1, y = 1; // célula central (5)
for (int i = 0; i < 4; i++) {
int newX = x + dx[i];
int newY = y + dy[i];
if (newX >= 0 && newX < matriz.length && newY >= 0 && newY < matriz[0].length) {
System.out.println("Vizinho: " + matriz[newX][newY]);
}
}
}
}
Você tem a seguinte matriz:
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
As coordenadas (x, y)
são essas:
(0, 0), (1, 0), (2, 0)
(0, 1), (1, 1), (2, 1)
(0, 2), (1, 2), (2, 2)
Isso significa que:
X Y Valor
(0, 0) = 1
(1, 0) = 2
(2, 0) = 3
(0, 1) = 4
(1, 1) = 5
(2, 1) = 6
(0, 2) = 7
(1, 2) = 8
(2, 2) = 9
@staroski obrigado pelo retorno.
Depois de algum tempo penso que consegui entender a relação de visitação dessa equação:
newX = x + dx[i] e
newY = y + dy[i].
Considerando o gráfico abaixo, sempre teremos a visitação:
de um vizinho a esquerda (X=-1)
de um vizinho a direita (X=1)
de um vizinho acima (Y=1) e
de um vizinho abaixo (Y=-1).
Y ↑
|
1|
|
-1 | 1
-----|---0---|----→ X
|
-1|
|
Dessa forma a representação leva em conta a posição (X) e a visitação Dx[i] para x e o mesmo para Y.
Y
- X X
- Y
public class MatrizNavegacao {
static final int[] dx = {-1, 1, 0, 0}; // cima, baixo, esquerda, direita
static final int[] dy = {0, 0, -1, 1};
public static void main(String[] args) {
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int x = 0, y = 0; // célula central (5)
for (int i = 0; i < 4; i++) {
int newX = x + dx[i];
int newY = y + dy[i];
if (newX >= 0 && newX < matriz.length &&
newY >= 0 && newY < matriz[0].length) {
System.out.println("newX"+newX);
System.out.println("newY"+newY);
System.out.println("Matriz"+ matriz[newX][newY]);
// newX newY
// i=0 matrix [0] [1] = 2
// i=1 matrix [2] [1] = 8
// i=2 matrix [1] [0] = 4
// i=3 matrix [1] [2] = 6
System.out.println("Vizinho: " + matriz[newX][newY]);
}
}
}
}