Hard-题目24:37. Sudoku Solver

来源:互联网 发布:试卷编辑软件 编辑:程序博客网 时间:2024/05/16 14:46

题目原文:
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.
题目大意:
写一个程序求标准数独。
题目分析:
注意是有返回值的dfs(如果有解或者解完了,则向下搜),没什么多说的。注意语言特性,要写C++而不是Java,因为Java是传值调用,那个棋盘传进下一层就不能带出来了。
源码:(language:cpp)

class Solution {public:    void solveSudoku(vector<vector<char>>& board) {        backtrack(board, 0, 0);    }    bool backtrack(vector<vector<char>>& board, int row, int col){        if(row == 9)            return true;        if(col == 9)            return backtrack(board, row+1, 0);        if(board[row][col] != '.')            return backtrack(board, row, col+1);        for(char i='1'; i<='9'; i++){            if(isValid(board, row, col, i)){                board[row][col] = i;                if(backtrack(board, row, col+1))                    return true;                board[row][col] = '.';            }        }        return false;    }    bool isValid(vector<vector<char>>& board, int row, int col, char k){        for(int i=0; i<9; i++){            if(board[i][col] == k)                return false;            if(board[row][i] == k)                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++){                if(board[i][j] == k)                    return false;            }        }        return true;    }};

成绩:
40ms,beats 66.04%,4ms,9.81%

0 0