Sudoku Solver 数独

原创 2018年04月16日 21:53:43

题目描述

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:
    void solveSudoku(vector<vector<char> > &board) {
        dfs(board, 0, 0);
    }
    bool dfs(vector<vector<char>> &board,int i,int j)
    {
         if (j >= 9) return dfs(board,i+1,0);//一行一行的遍历;
         if (i == 9) return true;  //遍历结束
         if (board[i][j] == '.') //此位置为空
         {
             for (int k = 1; k <= 9; k++)
             {
                 board[i][j] = char(k + '0'); //依次填入1-9,判断是否合格;
                 if (isValid(board, i, j))
                 {
                     if (dfs(board, i, j + 1)) return true;
                 }
                 board[i][j] = '.'; //如果不合格,重新设为空,填入下一个数字;
             }
         }
         else 
             return dfs(board,i,j+1); //如果不为空,递归下一列;
         return false;
     }
     bool isValid(vector<vector<char>> &board,int i,int j)
     {
         for (int k = 0; k < 9; k++)  //遍历每一列,判断有重复
         {
             if (k != j&&board[i][j] == board[i][k]) return false;
         }
         for (int k = 0; k < 9; k++)  //遍历每一行,判断有重复
         {
             if (k != i&&board[i][j] == board[k][j]) return false;
         }
         for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row++)//遍历(i,j)所在的小九宫格,判断有重复
         {
             for (int col = j / 3 * 3; col < j / 3 * 3 + 3; col++)
             {
                 if ((row != i || col != j) && board[i][j] == board[row][col])
                     return false;
             }
         }
         return true;
     }
};



LeetCode Sudoku Solver 数独C++程序

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

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

典型DFS/递归/回溯/深搜题。对于DFS,说白了 1) 什么时候返回?在本题中,1.当x>8或y>8 表示已经遍历完所有的格子,因此成功完成,返回true。2.当下一个搜索(子搜索)返回true,说...
  • hellobinfeng
  • hellobinfeng
  • 2013-11-24 11:00:55
  • 3385

leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题

三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Su...
  • wangyaninglm
  • wangyaninglm
  • 2016-05-04 22:07:52
  • 1248

LeetCode----Sudoku Solver+精确覆盖问题解法(Dancing Links)

BackGround:     做完LeetCode上的数独题目好长时间了,今天将做题时参考的Algorithm X 以及 Dancing Links 整理出来。话说理解算法+写出程序一共用了三天,...
  • zjx409
  • zjx409
  • 2014-12-10 16:09:27
  • 1236

使用C#编写一个求解数独的小软件

工程文件下载,点击这里:工程文件下载地址我挺喜欢的一个女同学喜欢做数独题目,作为忠实的备胎,当然是要为她提供一个能在她冥思苦想未果后寻求答案的小软件啦。说干就干,不能做的太low,所以得有个界面。我的...
  • shizhibuyi1234
  • shizhibuyi1234
  • 2018-04-01 10:50:13
  • 59

Sudoku Solver -- LeetCode

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

谈谈数独(Sudoku)

谈谈 Sudoku (数独) 除特别说明外,本文提到的Sudoku是指9x9的经典Sudoku。本文大量参考了维基百科的相关条目。 Sudoku 介绍 Sudoku 是一种数学游戏,把一个9行9列的棋...
  • Solstice
  • Solstice
  • 2008-02-15 00:15:00
  • 20249

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:05
  • 2124

Leetcode 37 Sudoku Solver

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

HDU 1426 Sudoku Killer(数独,划分区域是关键)

Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To...
  • hurmishine
  • hurmishine
  • 2016-05-06 19:14:06
  • 1406
收藏助手
不良信息举报
您举报文章:Sudoku Solver 数独
举报原因:
原因补充:

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