猿问

数组中两点之间的距离

我试图找出数组中两点之间的距离(或“步数”)。从该数组中的任何位置,到任何其他点。


例如:如果有一个 5x5 矩阵的 PacMan 地图,并且 Pacman 站在字段 row=0 和 column=0 上,他需要采取 8 步才能到达字段 r=5, c=5。但是,如果吃豆人站在 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

我希望你们能帮助我解决这个问题。:)


饮歌长啸
浏览 136回答 2
2回答

慕无忌1623718

将当前的 X 和 Y 坐标作为参数。从值中减去这些并取绝对值。这给出了你想要的行为。它实际上总是与您的第一个输出相同的距离表,但您给它一个偏移起始位置。例如:Current position (x1,y1) = 4,4.&nbsp; &nbsp;Wanted position&nbsp; (x2,Y2) = 3,2&nbsp; &nbsp;Distance = absolute(x2-x1) + absolute(y2-y1) = abs(3-4) + abs(2-4) = 1 + 2 = 3我修改了您的代码以提供正确的偏移量表:public static void path(int currentX, int currentY) {&nbsp; int[][] ratings = new int[5][5];&nbsp; int value = 0;&nbsp; for (int i = 0; i<ratings.length; i++) {&nbsp; &nbsp; value = Math.abs(i-currentX);&nbsp; &nbsp; for (int j = 0; j<ratings[i].length; j++) {&nbsp; &nbsp; &nbsp; ratings[i][j] = value + Math.abs(j-currentY);&nbsp; &nbsp; &nbsp; System.out.print("-"+ratings[i][j]);&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println();&nbsp; }}

慕村225694

另一种可能更清楚的方法是创建一个自定义距离方法,如下所示:static int dist(int x1, int y1, int x2, int y2) {&nbsp; return Math.abs(x1 - x2) + Math.abs(y1 - y2);}然后使用它你的循环:public static void path(int currX, int currY) {&nbsp; int[][] ratings = new int[5][5];&nbsp; for (int i = 0; i < ratings.length; i++) {&nbsp; &nbsp; for (int j = 0; j < ratings[i].length; j++) {&nbsp; &nbsp; &nbsp; ratings[j][i] = dist(j, i, currX, currY);&nbsp; &nbsp; &nbsp; System.out.print("-"+ratings[j][i]);&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println();&nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答