gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:47:19 25 4
gpt4 key购买 nike

我有以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com