簡體   English   中英

數組中兩點之間的距離

[英]Distance between two points in an array

我試圖找出數組中兩點之間的距離(或“步數”)。 從該數組中的任何位置,到任何其他點。

例如:如果有一張吃豆人地圖,它是一個 5x5 矩陣,吃豆人站在 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

我希望你們能幫我解決這個問題。 :)

給出當前的 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();
  }
}

另一種可能更清楚的方法是創建一個自定義距離方法,如下所示:

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();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM