用曼哈顿距离模式填充二维数组
Posted
技术标签:
【中文标题】用曼哈顿距离模式填充二维数组【英文标题】:Filling a 2d array with manhattan distance pattern 【发布时间】:2015-10-22 22:57:47 【问题描述】:我正在尝试为算法做这个作业,他们要求我填充一个二维的 int 数组,如下所示:
4 3 2 3 4
3 2 1 2 3
2 1 0 1 2
3 2 1 2 3
4 3 2 3 4
我在java中试过这个:
int[][] array = new int[5][5];
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array[i].length; j++)
array[i][j] = Math.abs(i - j);
但它给了我这样的东西:
0 1 2 3 4
1 0 1 2 3
2 1 0 1 3
3 2 1 0 1
4 3 2 1 0
这不是一回事,但它是我发现的最接近的。我用java编写了代码,但它可以用任何其他语言......重要的是我认为的“公式”。所以如果你能帮我解决这个问题那就太好了,我试图在网上寻找代码但我没有找到任何东西......谢谢。
【问题讨论】:
首先,您必须能够手动计算数字,然后才能使用计算机程序进行计算。所以每个单元格中的数字是曼哈顿到中心的距离。查看如何计算曼哈顿距离,然后手动计算以确保得到与示例相同的结果,然后将计算结果转换为代码。 【参考方案1】:看起来您正在寻找到中心的距离。所以你首先要计算这个点:
int center = array.length / 2; //assuming a quadratic array
那么,计算距离就很简单了:
//for ...
array[i][j] = Math.abs(i - center) + Math.abs(j - center);
【讨论】:
【参考方案2】:这也可以。
int p=N-1;
for(i=0,l=N-1;i<=l;i++,l--)
for(j=0,k=N-1;j<=k;j++,k--)
arr[i][j]=p;
arr[i][k]=p;
arr[l][j]=p;
arr[l][k]=p;
p--;
p=N-i-2;
【讨论】:
以上是关于用曼哈顿距离模式填充二维数组的主要内容,如果未能解决你的问题,请参考以下文章
HDU4456-Crowd (坐标旋转处理+hash处理+二维树状数组)