码迷,mamicode.com
首页 > 其他好文 > 详细

Sudoku Solver

时间:2016-03-13 19:54:58      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

 

思路:对空处依次填充1-9,然后判断是否合法。如果不合法就再回溯。

注意:判断合法性时,可以不用判断全部,直接判断对应的行,列,九小格。

对与九小格的 判断:可以用对应的3行和对应的3列唯一确定。

class Solution {
public:
    bool check(vector<vector<char>>& board,int x,int y)
    {
        int row,col;
        for(row=0;row<9;row++ )
        if(row!=x && board[row][y]==board[x][y]) return false;
        
        for(col=0;col<9;col++ )
        if(col!=y &&board[x][col]==board[x][y]) return false;
        
       for(row=x/3*3;row<(x/3+1)*3;row++ )
          for(col=y/3*3;col<(y/3+1)*3;col++ )
              if(x!=row&&y!=col && board[x][y]==board[row][col]) return false; 
              return true;
    }
    bool inter(vector<vector<char>>& board)
    {
         for(int i=0;i<9;i++)
          for(int j=0;j<9;j++)
          {
              if(board[i][j]==.)
              {
                  for(int k=1;k<=9;k++){
                  board[i][j]=0+k;
                  if(check(board,i,j))
                  if(inter(board)) return true;
                   board[i][j]=.;
                  }
                  return false;
              }
          }
          return true;
    }
    void solveSudoku(vector<vector<char>>& board) {
       inter(board);
    }
};

 

Sudoku Solver

标签:

原文地址:http://www.cnblogs.com/daocaorenblog/p/5272821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!