【问题标题】: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编写了代码,但它可以用任何其他语言......重要的是我认为的“公式”。所以如果你能帮我解决这个问题那就太好了,我试图在网上寻找代码但我没有找到任何东西......谢谢。

【问题讨论】:

  • 首先,您必须能够手动计算数字,然后才能使用计算机程序进行计算。所以每个单元格中的数字是曼哈顿到中心的距离。查看如何计算曼哈顿距离,然后手动计算以确保得到与示例相同的结果,然后将计算结果转换为代码。

标签: java arrays algorithm for-loop multidimensional-array


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多