Hard-题目24:37. Sudoku Solver

原创 2016年05月31日 23:36:28

题目原文:
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%

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

相关文章推荐

37. Sudoku Solver(Hard)

转自个人博客:http://siukwan.sinaapp.com/?p=787 1.这道题目主要是使用回溯法进行遍历,其中需要注意的是进行剪枝。剪枝情况如下:首先是遍历可以填充的数字,如果遍历完后...
  • jmlikun
  • jmlikun
  • 2015年12月23日 00:16
  • 232

37. Sudoku Solver

这样的题目一般通过回溯法求解,设置某个空格时,如果该空格无论设置什么数字都无法达到合法状态,那么回溯重新设置上一个空格,详见代码注释。注意,这样的题目一定要想明白每一处细节,才能够作对。代码如下: ...

LeetCode-37.Sudoku Solver

https://leetcode.com/problems/sudoku-solver/ Write a program to solve a Sudoku puzzle by fillin...

Leetcode #37. Sudoku Solver 数独求解 结题报告

1 解题报告首先可以看下昨天的 Leetcode #36. Valid Sudoku 数独游戏验证 解题报告 数独的求解,这道题可以假设给定的这个是正确的做法就只能是暴力的回溯了。。 方法是回溯,用...
  • MebiuW
  • MebiuW
  • 2016年04月08日 23:58
  • 807

LeetCode 37 - Sudoku Solver

Sudoku Solver Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells ar...
  • ywcpig
  • ywcpig
  • 2016年03月01日 21:37
  • 265

(Java)LeetCode-37. Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by t...

Leetcode 37 Sudoku Solver 深搜基础题+位运算

强烈推荐的算法入门题,填数独,深搜方法完成,采用的标记方法依然和上一题一样,位操作,代码已详细给出注释。 Write a program to solve a Sudoku puzzle by fil...

DAY22:leetcode #37 Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by t...

LeetCode(37) Sudoku Solver

题目如下: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated...

Leetcode (37) Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目24:37. Sudoku Solver
举报原因:
原因补充:

(最多只允许输入30个字)