[leetcode]Sudoku Solver

来源:互联网 发布:全国二级c语言真题 编辑:程序博客网 时间:2024/05/28 05:14

Sudoku Solver

 Total Accepted: 4129 Total Submissions: 20589My Submissions

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...


本题用回溯法(递归),检查每个格子,如果是‘.’ 用1到9 依次带入试验,

比如带入‘1’时,如果(isValid)&&(solve)为true 说明可行,不可行的话复位‘.’


class Solution {public:    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(char now='1'; now<='9';now++){                        board[i][j]=now;                        if(isValid(board,i,j) && solve(board))                            return true;                        else                            board[i][j]='.';                    }                    return false;                }            }        }        return true;    }    bool isValid(vector<vector<char>> &board, int row, int col){        for(int j=0; j<9; j++){//检查所在行            char checkch=board[row][j];            if(j!=col  && checkch==board[row][col] )                return false;        }        for(int i=0; i<9; i++){//检查所在列            char checkch=board[i][col];            if(i!=row  && checkch==board[row][col])                return false;        }        for(int i=(row/3)*3; i<(row/3)*3+3; i++){            for(int j=(col/3)*3; j<(col/3)*3+3; j++){                char checkch=board[i][j];                if(i!=row && j!=col && checkch==board[row][col])                    return false;            }        }        return true;    }};








0 0