LeetCode Sudoku Solver 回溯

原创 2015年07月08日 11:20:37

思路:

DFS。时间复杂度O(9^4),空间复杂度O(1)。
下棋添子,下完一步下另一步,不行就回溯。

class Solution {
private:
    bool isValid(vector<vector<char>> &board, int i, int j) {
        //check col
        for(int row = 0; row < 9; ++row) {
            if(row != i && board[row][j] == board[i][j]) {
                return false;
            }
        }
        //check row
        for(int col = 0; col < 9; ++col) {
            if(col != j && board[i][col] == board[i][j]) {
                return false;
            }
        }
        //check cube
        for(int row = i - i%3; row < i + (3 - i%3); ++row) {
            for(int col = j - j%3; col < j + (3 - j%3); ++col) {
                if(row == i && col == j) continue;
                if(board[row][col] == board[i][j]) {
                    return false;
                }
            }
        }
        return true;
    }

    bool dfs(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] = '0' + k;
                        if(isValid(board, i, j) && dfs(board)) {
                            return true;
                        }
                        board[i][j] = '.';
                    }
                    return false;
                }
            }
        }
        return true;
    }
public:
    void solveSudoku(vector<vector<char>>& board) {
        dfs(board);
    }
};

LeetCode: Sudoku Solver

思路:(借助网上的讨论)因为题目保证只有一个
  • AIvin24
  • AIvin24
  • 2014年06月22日 18:52
  • 1879

Leetcode 37 Sudoku Solver

做了这道题,对backtracking的理解又加深了一点点。 1 每个backtracking的题目,最好都有独立判断isValid的程序,这样架构清楚。同时,valid判断函数在这里可以稍微研究一...
  • zxzxy1988
  • zxzxy1988
  • 2013年02月17日 21:53
  • 7777

Sudoku Solver -- LeetCode

原题链接: http://oj.leetcode.com/problems/sudoku-solver/  这道题的方法就是用在N-Queens中介绍的常见套路。简单地说思路就是循环处理子问题,对于...
  • linhuanmars
  • linhuanmars
  • 2014年03月10日 03:56
  • 20330

LeetCode 37 Sudoku Solver (C,C++,Java,Python)

Problem: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells ar...
  • runningtortoises
  • runningtortoises
  • 2015年05月19日 13:11
  • 2037

[leetcode-37]Sudoku Solver(java)

问题描述: Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated...
  • zdavb
  • zdavb
  • 2015年09月01日 22:20
  • 993

LeetCode(37) Sudoku Solver

题目如下: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated...
  • feliciafay
  • feliciafay
  • 2015年03月23日 07:55
  • 924

37. Sudoku Solver leetcode python new season 2016

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by...
  • hyperbolechi
  • hyperbolechi
  • 2016年01月20日 11:50
  • 289

LeetCode Sudoku Solver 数独C++程序

本题使用回溯法来解题,思路: 1 使用两个循环,逐个检查所有的方格 2 每到一个方格,检查到位空,以‘.'字符代表,就循环使用’1‘...
  • kenden23
  • kenden23
  • 2013年12月05日 07:47
  • 4033

(Java)LeetCode-37. Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by t...
  • u012848330
  • u012848330
  • 2016年08月09日 21:36
  • 255

Sudoku Solver 破解数独 @LeetCode 附DFS感想

典型DFS/递归/回溯/深搜题。对于DFS,说白了 1) 什么时候返回?在本题中,1.当x>8或y>8 表示已经遍历完所有的格子,因此成功完成,返回true。2.当下一个搜索(子搜索)返回true,说...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月24日 11:00
  • 3300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode Sudoku Solver 回溯
举报原因:
原因补充:

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