确定从给定位置到网格边缘的最短距离

时间:2014-05-05 04:40:15

标签: java matrix distance

例如,如果我有5 x 5网格,并且我有位置13.我想找到每个方向上的每个边缘的绝对距离,不包括对角线。所以从13到左边是3,右边是1,到底部是2,到顶部是2。我怎么接近这个?

 0  1  2  3  4 
 5  6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

2 个答案:

答案 0 :(得分:2)

距离顶部的距离是行,

int row = (int)(13/5); // 2

距离左边的距离是列,将剩下的13乘以5。

int col = (int)(13%5); // 3

距右侧的距离是列减去总列数(5)

int colFromRight = 5-col-1; // 1

距离底部的距离是行减去总行数(5)

int rowFromBottom = 5-row-1; // 2

修改

可能会有所帮助

这是一个我们想要视为二维数组的一维数组。它有2行3列,总共6个元素。在我们的程序中,它是一个像这样的1d数组,我使用方括号[]看起来不是语法。

[1][2][3][4][5][6]
在视觉上它会像这样

[1][2][3]
[4][5][6]

因此,为了获得说明位置5的行,我们说

int location = 5;
int row = floor(location/3);

正如您所看到的那样,每次行变为1 + 3的倍数时,行数将会增加。

<小时/> 对于列,它是相同的,但有余数。

int location = 5;
int column = location%3;

每次当位置达到3时,余数返回0并且列重新开始(基本表示新行)。

答案 1 :(得分:1)

将其视为一维数组并使用模数,除法和减法。

row_length = 5
col_length = 5
index = 13

x = (index % row_length);
y = (index - x) / col_length;

distance from left edge = row_length - x
distance from bottom = col_length - y

编辑:几个月前我在一次采访中实际上被问过这个问题,然后把它搞砸了。我在博客文章中写到:http://tmblr.co/ZSJA4p18C4Ow0

编辑2:修正了减法以找到左/下边缘。