zoukankan      html  css  js  c++  java
  • Sudoku Solver

    思路:对空处依次填充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);
        }
    };
  • 相关阅读:
    dp
    康拓展开
    MST + 树形 dp
    树上对抗搜索
    求树上任意一点所能到达的最远距离
    将一棵树变成一个环
    树形dp
    区间dp
    区间dp
    day07作业
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5272821.html
Copyright © 2011-2022 走看看