0
点赞
收藏
分享

微信扫一扫

Sudoku Solver 数独填充 递归判断回溯

北溟有渔夫 2023-04-04 阅读 56


Sudoku Solver


Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.

A sudoku puzzle...

...and its solution numbers marked in red.

class Solution {
public:

//每个点进行判断,1-9是否适合,判断其横、竖、小三角,是否合法。不合法,回溯
    void solveSudoku(vector<vector<char>>& board) {
        solve(board);
    }
    
    bool solve(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]=k+'0';
                        if(isValid(board,i,j))
                        {
                            if(solve(board))
                                return true;
                        }
                        board[i][j]='.';
                    }
                    return false;
                }
            }
        return true;
    }
    
    bool isValid(vector< vector<char> >& board,int x,int y)//判断这个点的合法性
    {
        for(int i=0;i<9;i++)
        {
            if(x!=i && board[i][y]==board[x][y])
                return false;
        }
           
        for(int i=0;i<9;i++)
        {
            if(y!=i && board[x][i]==board[x][y])
                return false;
        }
        
        for(int i=x/3*3;i<(x/3+1)*3;i++)
        {
            for(int j=y/3*3;j<(y/3+1)*3;j++)
            {
                if(x!=i && y!=j && board[i][j]==board[x][y])
                    return false;
            }
        }
        
        return true;
    }
};

举报

相关推荐

0 条评论