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

Sudoku Solver

时间:2014-07-27 23:16:19      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   div   ar   amp   

就是回溯吧。。

class Solution {
public:
    void solveSudoku(vector<vector<char> > &board) {
        huisu(0,0,board);
    }
    
    bool huisu(int row,int col ,vector<vector<char> > &board ){
        
         if(board[row][col]!=.)//如果不是.的话,说明不需要赋值
         {
                  if(row==8&&col==8) {return true;}//如果到了最后一个点,返回true;
                    else if(col==8)//如果到了第八列,则移上新的一行,
                    {
                        return huisu(row+1,0,board);
                    }
                    else
                    {
                        return huisu(row,col+1,board);
                    } 
            }
        else//如果是.的话,说明需要赋值。
        {
        for(int i=1;i<=9;i++)
        {
                board[row][col]=0+i;
                if(isValidSudoku(board,col,row))//如果合格的话
                {
                    if(row==8&&col==8) {return true ;}
                    else if(col==8)
                    {
                        if(huisu(row+1,0,board)) {return true;}
                        else { board[row][col]=.;continue;}
                    }
                    else
                    {
                        if(huisu(row,col+1,board)) return true;
                        else { board[row][col]=.;continue;}
                    }
                }
                else { board[row][col]=.;}
            
        }
        }
        return false;
    }
    
    bool isValidSudoku(vector<vector<char> > &board, int x, int y) {
        int row, col;
        for (row = 0; row < 9; ++row) {
            if ((x != row) && (board[row][y] == board[x][y])) {
                return false;
            }
        }
        for (col = 0; col < 9; ++col) {
            if ((y != col) && (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[row][col] == board[x][y])) {
                    return false;
                }
            }
        }
        return true;
    }
};

 

Sudoku Solver,布布扣,bubuko.com

Sudoku Solver

标签:style   blog   color   io   for   div   ar   amp   

原文地址:http://www.cnblogs.com/ian-fix/p/3871856.html

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