在2D数组中找到到达拐角的最短路径

时间:2019-11-30 03:59:45

标签: java arrays

我有下面的2D int数组(这是一个棋盘游戏)。给定我的棋子5的位置,如何确定距国王4个角(数6)中最接近的角(不考虑障碍)我不想在这里宣誓最短,我想要最接近棋子5的角。我怎么能得到这个?

013 | 6 0 2 0 0 2 0 0 0 0 0 0 6 
012 | 0 2 0 0 0 4 0 0 0 0 0 0 0 
011 | 2 0 0 0 0 0 0 0 0 0 0 0 0 
010 | 0 0 0 0 0 0 0 0 0 0 0 0 0 
009 | 0 0 5 0 0 0 0 0 0 0 0 0 0 
008 | 0 0 0 0 0 0 0 0 0 2 0 0 0 
007 | 0 0 0 0 0 0 8 0 0 0 0 0 0 
006 | 2 0 0 0 0 0 0 0 0 0 0 0 0 
005 | 0 2 0 0 0 0 0 0 0 0 0 0 0 
004 | 0 0 0 0 0 0 0 0 0 0 0 0 0 
003 | 0 2 0 0 2 0 0 0 0 0 0 0 0 
002 | 0 0 0 0 0 0 0 0 0 0 0 0 0 
001 | 6 0 0 0 0 0 0 0 0 0 0 0 6 

我忘了添加代码:这是我开始的部分

public int findNearestKingExist(Board board) {
        int[] kingPos = board.findKing();

        int[][] grid = board.board;

        int x = kingPos[0];
        int y = kingPos[1];

        int topLeft = Math.abs(grid[x][y] + grid[0][0]);
        int bottLeft = Math.abs(grid[x][y] + grid[0][12]);
        int topRight = Math.abs(grid[x][y] + grid[12][0]);
        int bottRight = Math.abs(grid[x][y] + grid[12][12]);

        int shortestDistance = Math.min(Math.min(topLeft, topRight), Math.min(bottLeft, bottRight));

        return shortestDistance;
    }

1 个答案:

答案 0 :(得分:0)

这更多是一个数学问题。

如果假设数组是笛卡尔图的象限,则使用距离公式,以数组索引为坐标。

假设您将元素存储为grid [r] [c]: 计算以下内容:

int tl = (int) Math.pow(r, 2) +Math.pow(c, 2);
int tr = (int) Math.pow(grid.length - c, 2)  + Math.pow(r, 2);
int bl = (int) Math.pow(grid.length - r, 2)  + Math.pow(c, 2);
int br = (int) Math.pow(grid.length - c, 2)  + Math.pow(grid.length - r, 2);

然后比较整数,最小的是最接近的。

注意:

我没有对和求平方根,因为这不会改变最接近的点,只是增加了另一步不必要的计算。

出于XD的明显原因,对于坐标或横坐标均为0的所有坐标,我也都未减去0。

编辑:

忘记键入强制转换为整数。

相关问题