【问题标题】:Converting a one-dimensional array[81] to a multi-dimensional array[9][9] (sudoku solver) [duplicate]将一维数组[81]转换为多维数组[9][9](数独求解器)[重复]
【发布时间】:2014-09-07 23:48:35
【问题描述】:

我最近开始制作数独求解器。求解器本身已经完成并且效果很好,但我发现了一个问题。我的求解器基于存储数独游戏板编号的二维数组。 数组长这样......

12 代表需要数字的空格。

private static int[][] currentPuzzle = new int[][] {
        { 12, 12, 6, 12, 12, 12, 12, 12, 12 },
        { 12, 12, 12, 12, 3, 6, 5, 12, 12 },
        { 2, 3, 8, 12, 12, 4, 12, 12, 12 },
        { 8, 7, 12, 12, 12, 12, 12, 12, 5 },
        { 12, 12, 3, 12, 9, 12, 2, 12, 12 },
        { 4, 12, 12, 12, 12, 12, 12, 6, 8 },
        { 12, 12, 12, 4, 12, 12, 8, 1, 9 },
        { 12, 12, 9, 3, 7, 12, 12, 12, 12 },
        { 12, 12, 12, 12, 12, 12, 6, 12, 12 } };

问题是我的程序使用反射 java api 从游戏中读取数独板整数。该方法将数独板作为一维数组返回,如下所示....

12 代表需要数字的空格。

private static int[] currentPuzzle = new int[] { 12, 12, 6, 12, 12, 12, 12,
        12, 12, 12, 12, 12, 12, 3, 6, 5, 12, 12, 2, 3, 8, 12, 12, 4, 12,
        12, 12, 8, 7, 12, 12, 12, 12, 12, 12, 5, 12, 12, 3, 12, 9, 12, 2,
        12, 12, 4, 12, 12, 12, 12, 12, 12, 6, 8, 12, 12, 12, 4, 12, 12, 8,
        1, 9, 12, 12, 9, 3, 7, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6,
        12, 12 };

我需要将板子的一维数组版本(上面显示的第二个数组)转换成二维数组版本(上面显示的第一个数组)格式。新的二维数组必须有 9 行 9 列。

你们有什么想法吗?

【问题讨论】:

    标签: java arrays multidimensional-array


    【解决方案1】:

    您需要使用嵌套循环来填充二维数组,并在每一点访问一维数组中的正确位置:

    int[][] result = new int[9][];
    for(int x = 0;x < 9;x++) {
        result[x] = new int[9];
        for(int y = 0;y < 9;y++) {
            result[x][y] = currentPuzzle[9*x+y];
        }
    }
    

    您还需要考虑什么是 X,什么是 Y,以及一维数组的排序顺序。此代码可能会生成一个围绕对角线翻转的数独。

    【讨论】:

      【解决方案2】:

      当然 - 看起来这应该很容易。只要你知道它会有 81 个条目,你就可以使用这个:

      public static int[][] convertArray(int[] oldArray) {
          int[][] newArray = new int[9][9];
          for(int i = 0; i < 8; i++) {
              for(int k = 0; k < 8; k++) {
                  newArray[i][k] = oldArray[(i * 9) + k]
              }
          }
          return newArray;
      }
      

      这个想法是您创建一个新的二维数组,然后外部 forloop 控制您将数字放入哪一行,内部 forloop 控制哪一列。

      【讨论】:

        猜你喜欢
        • 2017-09-27
        • 2014-11-25
        • 2014-04-23
        • 2020-08-10
        • 2023-03-26
        • 2019-06-29
        相关资源
        最近更新 更多