package Others;class Sudoku{public static boolean isSafe(int[][] board,int row, int col,int num){// Row has the unique (row-clash)for (int d = 0; d < board.length; d++){// Check if the number we are trying to// place is already present in// that row, return false;if (board[row][d] == num) {return false;}}// Column has the unique numbers (column-clash)for (int r = 0; r < board.length; r++){// Check if the number// we are trying to// place is already present in// that column, return false;if (board[r][col] == num){return false;}}// Corresponding square has// unique number (box-clash)int sqrt = (int)Math.sqrt(board.length);int boxRowStart = row - row % sqrt;int boxColStart = col - col % sqrt;for (int r = boxRowStart;r < boxRowStart + sqrt; r++){for (int d = boxColStart;d < boxColStart + sqrt; d++){if (board[r][d] == num){return false;}}}// if there is no clash, it's safereturn true;}public static boolean solveSudoku(int[][] board, int n){int row = -1;int col = -1;boolean isEmpty = true;for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (board[i][j] == 0){row = i;col = j;// We still have some remaining// missing values in SudokuisEmpty = false;break;}}if (!isEmpty) {break;}}// No empty space leftif (isEmpty){return true;}// Else for each-row backtrackfor (int num = 1; num <= n; num++){if (isSafe(board, row, col, num)){board[row][col] = num;if (solveSudoku(board, n)){// print(board, n);return true;}else{// replace itboard[row][col] = 0;}}}return false;}public static void print(int[][] board, int N){// We got the answer, just print itfor (int r = 0; r < N; r++){for (int d = 0; d < N; d++){System.out.print(board[r][d]);System.out.print(" ");}System.out.print("\n");if ((r + 1) % (int)Math.sqrt(N) == 0){System.out.print("");}}}// Driver Codepublic static void main(String args[]){int[][] board = new int[][] {{ 3, 0, 6, 5, 0, 8, 4, 0, 0 },{ 5, 2, 0, 0, 0, 0, 0, 0, 0 },{ 0, 8, 7, 0, 0, 0, 0, 3, 1 },{ 0, 0, 3, 0, 1, 0, 0, 8, 0 },{ 9, 0, 0, 8, 6, 3, 0, 0, 5 },{ 0, 5, 0, 0, 9, 0, 6, 0, 0 },{ 1, 3, 0, 0, 0, 0, 2, 5, 0 },{ 0, 0, 0, 0, 0, 0, 0, 7, 4 },{ 0, 0, 5, 2, 0, 6, 3, 0, 0 }};int N = board.length;if (solveSudoku(board, N)){// print solutionprint(board, N);}else {System.out.println("No solution");}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。