java - 在二维数组中查找到拐角的最短路径
问题描述
我有以下 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。
编辑:
忘记将类型转换为 int。
推荐阅读
- filter - 如何为基于 FFT 的高斯滤波器确定 sigma
- windows - Flutter Web 表单在 mac 浏览器(firefox、chrome)中工作,但在 windows 或 ios 浏览器(firefox、chrome、safari)中不起作用
- vb.net - 在代码中更改控件名称颜色 - Visual Studio 2019
- python - ImageMagick 的转换输出乱码图像
- java - 我该如何解决
预期错误? - javascript - 从下拉项中传递值
- c# - 如何删除实体框架中的多个级联路径
- asp.net-identity - Blazor WebAssembly 中定义的登录页面在哪里?
- python - 遍历列表并在 Python 中找到匹配项
- tensorflow - Keras 检查点未保存到谷歌云存储桶