Расстояние между двумя точками в массиве - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь выяснить расстояние (или количество «шагов») между двумя точками в массиве. Из любой точки этого массива в любую другую точку.

Например: Если есть карта PacMan, представляющая собой матрицу 5x5, и Пакман стоит на строке поля = 0 и столбце = 0, ему нужно сделать 8 шагов, чтобы добраться до поля r = 5, c = 5. Но сколько шагов ему нужно, чтобы добраться до поля 3х3, если Пакман стоит на 4х5 ?? Я отчаянно пытаюсь понять это.

Это то, что у меня так далеко:

1   public static void path() {
2       int[][] ratings = new int[5][5];
3       int value = 0;
4       for(int i = 0; i<ratings.length; i++) {
5           value = i;
6           for(int j = 0; j<ratings[i].length; j++) {
7               ratings[i][j] = value;
8               value++;
9               System.out.print("-"+ratings[i][j]);
10          }
11          System.out.println();
12      }
13  }

Выход:

-0-1-2-3-4
-1-2-3-4-5
-2-3-4-5-6
-3-4-5-6-7
-4-5-6-7-8

Как видите, я пытаюсь дать каждой позиции массива определенный рейтинг пути. Начальной точкой является точка с 0. Как мне получить этот вывод в качестве примера:

-3-2-3-4-5
-2-1-2-3-4
-1-0-1-2-3
-2-1-2-3-4
-3-2-3-4-5

Я надеюсь, что вы, люди, можете помочь мне с этим. :)

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Другой подход, возможно, более понятный, заключается в создании пользовательского метода расстояния следующим образом:

static int dist(int x1, int y1, int x2, int y2) {
  return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}

затем используйте его в вашем цикле:

public static void path(int currX, int currY) {

  int[][] ratings = new int[5][5];
  for (int i = 0; i < ratings.length; i++) {
    for (int j = 0; j < ratings[i].length; j++) {
      ratings[j][i] = dist(j, i, currX, currY);
      System.out.print("-"+ratings[j][i]);
    }
    System.out.println();
  }
}
0 голосов
/ 12 января 2019

Дайте текущие координаты X и Y в качестве параметров. Вычтите их из значений и возьмите абсолют. Это дает поведение, которое вы хотите. На самом деле это всегда та же таблица расстояний, что и в первом выводе, но вы задаете ей начальную позицию смещения.

Например:

Current position (x1,y1) = 4,4.   
Wanted position  (x2,Y2) = 3,2   
Distance = absolute(x2-x1) + absolute(y2-y1) = abs(3-4) + abs(2-4) = 1 + 2 = 3

Я изменил ваш код, чтобы получить правильную таблицу смещений:

public static void path(int currentX, int currentY) {
  int[][] ratings = new int[5][5];
  int value = 0;
  for (int i = 0; i<ratings.length; i++) {
    value = Math.abs(i-currentX);
    for (int j = 0; j<ratings[i].length; j++) {
      ratings[i][j] = value + Math.abs(j-currentY);
      System.out.print("-"+ratings[i][j]);
    }
    System.out.println();
  }
}
...