java - 在二维数组中找到到角点的最短路径

标签 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;
    }

最佳答案

这更像是一个数学问题。

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

假设您将元素存储为 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);

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

注意:

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

出于显而易见的原因,我也没有为所有纵坐标或横坐标为 0 的坐标减去 0 XD。

编辑:

忘记输入cast to int。

关于java - 在二维数组中找到到角点的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59113083/

相关文章:

java - 无效时从 XML 中删除可选元素

Java Swagger UI - 如何正确配置枚举?

python - Numpy 广播数组

java - java中的数组是按引用传递还是按值传递?

java - 除非存在 @autowired 依赖项,否则 Spring 框架不会调用 BeanPostProcessor

java - 卡夫卡快速入门 : What Dependencies do I need?

java - 罗马数字转整数

python - Scikit Learn - 组合 TfidfVectorizer 和 OneHotEncoder 的输出 - 维度

php - Twig 中的多维数组

java - 如何在 Java 中将 List<Integer> 转换为 int[]?