2017-05-18 20 views
0

我有一個數獨解算器,完美地與9x9 sudokus一起使用。我想得到它與9x6 sudokus和其他大小的工作。是否可以改變這個功能?Java Sudoku求解器,它是否與不同的數獨尺寸一樣工作?

你可以看到,「9」始終是硬編碼。所以我嘗試將這些值更改爲9和6,但結果在我的解決方案中僅爲0。

所以之前我繼續瞎搞與此,它甚至有可能改變這種支持不同的網格大小不改變的功能呢?

public boolean solve(int i, int j, int[][] cells) { 

     if (i == 9) { 
      i = 0; 
      if (++j == 9) { 
       return true; 
      } 
     } 
     if (cells[i][j] != 0) 
     { 
      return solve(i + 1, j, cells); 
     } 

     for (int val = 1; val <= 9; ++val) { 
      if (legal(i, j, val, cells)) { 
       cells[i][j] = val; 
       if (solve(i + 1, j, cells)) { 
        return true; 
       } 
      } 
     } 
     cells[i][j] = 0; 
     return false; 
    } 

    public static boolean legal(int i, int j, int val, int[][] cells) { 
     for (int k = 0; k < 9; ++k) // rij 
     { 
      if (val == cells[k][j]) { 
       return false; 
      } 
     } 

     for (int k = 0; k < 9; ++k) // kolom 
     { 
      if (val == cells[i][k]) { 
       return false; 
      } 
     } 

     int boxRowOffset = (i/3) * 3; 
     int boxColOffset = (j/3) * 3; 
     for (int k = 0; k < 3; ++k) // box 
     { 
      for (int m = 0; m < 3; ++m) { 
       if (val == cells[boxRowOffset + k][boxColOffset + m]) { 
        return false; 
       } 
      } 
     } 

     return true; 

    } 
+5

我看不出數獨謎題*可以*具有不同於列的行數... – David

+2

數獨謎題總是有AxA但從來沒有AxB的大小。你可以嘗試的3x3,6x6的,9x9的,12×12,15×,18×18等 – XtremeBaumer

+0

好,你可以有各種[形狀](https://www.google.co.uk/search?q=sudoku+different+形狀&tbm = isch&tbo = u&source = univ&sa = X&ved = 0ahUKEwiAybuhzPnTAhVL2SwKHcaFDh4QsAQILw&biw = 1703&bih = 878)。但之後我不會再稱它爲數獨...... – GhostCat

回答

1

最原始的數獨是一個2x2的數獨

1 2 
2 1 

你有excaclty兩種解決方案,每個號碼的出現在每一行中,每個號碼顯示在每一列。

另一個例子是一個3x2的

1 2 
2 3 
3 1 

這是不可解的,因爲不是所有的號碼都存在每排。

另外一個9x6不會有現在每一行中每一個數字。

因此無解是可能的,這不是一個數獨。