用曼哈顿距离模式填充二维数组



我在做算法作业,题目让我像这样填充一个二维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写的代码,但它可以用任何其他语言…我认为重要的是"公式"。所以如果你能帮助我解决这个问题,那就太好了,我试着在网上寻找代码,但我没有找到任何东西……谢谢你。

看起来你在寻找到中心的距离。所以首先要计算这个点:

int center = array.length / 2; //assuming a quadratic array

那么,计算距离就很容易了:

//for ...
array[i][j] = Math.abs(i - center) + Math.abs(j - center);

这也可以。

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

相关内容

  • 没有找到相关文章

最新更新