zoukankan      html  css  js  c++  java
  • Sudoku Solver

     1 public class Solution {
     2     public void solveSudoku(char[][] board) {
     3         // IMPORTANT: Please reset any member data you declared, as
     4         // the same Solution instance will be reused for each test case.
     5         solveSudokuRecursive(board);
     6     }
     7     private boolean solveSudokuRecursive(char[][] board) {
     8         int[] pairs = getFirstEmpty(board);
     9         if (pairs[0] == -1 && pairs[1] == -1)
    10             return true;
    11         for (int i = 1; i <= 9; i++) {
    12             board[pairs[0]][pairs[1]] = (char) (i + '0');
    13             if (isValid(board, pairs[0], pairs[1])
    14                     && solveSudokuRecursive(board)) {
    15                 return true;
    16             }
    17             board[pairs[0]][pairs[1]] = '.';
    18         }
    19         return false;
    20     }
    21 
    22     private int[] getFirstEmpty(char[][] board) {
    23         int[] pairs = null;
    24         for (int i = 0; i < 9; i++) {
    25             for (int j = 0; j < 9; j++) {
    26                 if (board[i][j] == '.') {
    27                     pairs = new int[] { i, j };
    28                     return pairs;
    29                 }
    30             }
    31         }
    32         pairs = new int[] { -1, -1 };
    33         return pairs;
    34     }
    35 
    36 
    37     private boolean isValid(char[][] board, int x, int y) {
    38 
    39         for (int i = 0; i < 9; i++) {
    40             if (i != y && board[x][i] == board[x][y])
    41                 return false;
    42 
    43             if (i != x && board[i][y] == board[x][y])
    44                 return false;
    45         }
    46 
    47         int xIdx = (x / 3) * 3;
    48         int yIdx = (y / 3) * 3;
    49         for (int m = 0; m < 3; m++) {
    50             for (int n = 0; n < 3; n++) {
    51                 if(m + xIdx != x && n + yIdx != y && board[m + xIdx][n + yIdx] == board[x][y])
    52                     return false;
    53             }
    54         }
    55         return true;
    56     }
    57 }
  • 相关阅读:
    七天冲刺04
    软件工程概论项目——典型用户场景分析
    七天冲刺3
    七天冲刺2
    七天冲刺1
    第十三周总结
    软件工程概论个人作业02
    第二周学习进度
    软件工程个人作业01--四则运算
    连接数据库的javaee编译简易的WEB登陆界面
  • 原文地址:https://www.cnblogs.com/jasonC/p/3432886.html
Copyright © 2011-2022 走看看