我试图找出数组中两个点之间的距离(或“步数”)。从该阵列中的任何地方到任何其他地方。
例如: 如果有一个PacMan映射为5x5矩阵,并且Pacman站在字段row = 0和column = 0上,则他需要采取8个步骤才能到达字段r = 5,c = 5。 但是如果Pacman站在4x5上,他需要多少步才能到达3x3领域? 我拼命地想办法解决这个问题。
这是到目前为止我得到的:
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
我希望你们能帮助我解决这个问题。 :)
答案 0 :(得分:1)
将当前的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();
}
}
答案 1 :(得分:0)
另一种也许更清晰的方法是创建一个自定义距离方法,如下所示:
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();
}
}