LeetCode37.Sudoku solver电脑来解数独

原创 2016年05月31日 20:07:45


#include <vector>
#include <iostream>
#include "cocos2d.h"
using namespace std;
using namespace cocos2d;


void printvector(vector<vector<char>>& board)
{
log("----------------------------------");
for (int i = 0; i < board.size(); i++) {
string s;
for (int j = 0; j < board[i].size(); j++) {
s.append(" ");
s.append(string(1, board[i][j]));
}
log(s.c_str());
}
}


struct Vex{
int row;
int col;
int val;
Vex(int r, int c, int v) : row(r), col(c), val(v){}
};


class Solution {
public:
void solveSudoku(vector<vector<char>>& board) {
vector<Vex> vi;
int i = 0;
for (; i < board.size(); i++) {
int j = 0;
for (; j < board[i].size(); j++) {
if (board[i][j] == '.') {
int v = 1;
while (true) {
for (; v <= 9; v++) {
if (isOk(board, i, j, v + '0')) {
break;
}
}
if (v == 10) {
//printvector(board);
v = vi.back().val+1;
i = vi.back().row;
j = vi.back().col;
board[i][j] = '.';
vi.pop_back();
}
else {
vi.push_back(Vex(i, j, v));
board[i][j] = '0' + v;
break;
}
}
}
}
}
}
bool isOk(vector<vector<char>>& board, int row, int col, char val)
{
for (int c = 0; c < 9; c++) {
if (board[row][c] == val) {
return false;
}
if (board[c][col] == val) {
return false;
}
if (board[(row / 3)*3 + c / 3][(col / 3)*3 + c % 3] == val) {
return false;
}
}
return true;
}
};




void sudoku_test()
{

vector<string> sv{ "..9748...", "7........", ".2.1.9...", "..7...24.", ".64.1.59.", ".98...3..", "...8.3.2.", "........6", "...2759.." };
vector<vector<char>> vvc;
for (int i = 0; i < sv.size(); i++) {
vvc.push_back(vector<char>(sv[i].begin(), sv[i].end()));
}
Solution s;
printvector(vvc);
s.solveSudoku(vvc);
printvector(vvc);


}
版权声明:本文为博主原创文章,未经博主允许不得转载。

一个很傻瓜式解数独算法

假设你的棋盘是一个二维数组:cells,类型int[9, 9] static Tuple Solve() { steps = 0; ...
  • u010655942
  • u010655942
  • 2016年09月21日 21:07
  • 1630

Java学习:解数独的小程序

解决数独的java小程序
  • databatman
  • databatman
  • 2016年02月23日 22:35
  • 3850

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

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

数独解法 C++实现

#include   using namespace std;   /* 构造完成标志 */ bool sign = false;   /* 创建数独矩阵 */ int num[9][9];   /...
  • qq_31558353
  • qq_31558353
  • 2016年01月31日 20:04
  • 3878

JavaScript之破解数独(附详细代码)

在上一篇分享中,我们用Python和Django来破解数独,这对不熟悉Python和Django的人来说是非常不友好的。这次,笔者只用HTML和JavaScript写了破解数独的程序,对于熟悉前端的人...
  • jclian91
  • jclian91
  • 2018年01月12日 17:17
  • 67

回溯法解数独题

近段时间用到回溯算法的地方比较多,对算法的理解也有深入。今天偶然发现一张照片,是高中时未做完的一道数独题。当时用的是“候选余数法”,之后由于太麻烦,就没有做完。不过当时截图保存了,今天突然看到。那时候...
  • u011694809
  • u011694809
  • 2015年05月28日 14:13
  • 2407

解数独算法,用C语言递归实现

前几天在看离散数学及其应用第七版的时候,看到了数独的相关章节,就自己写了一个数独的解法,先记下来。生成数独的方法以后再写 #include // 寻找下一个未填充的单元 int find_next...
  • qiuhui00
  • qiuhui00
  • 2014年12月22日 10:28
  • 2290

回溯算法解数独问题(java版)

下面来详细讲一下如何用回溯算法来解数独问题。     下图是一个数独题,也是号称世界上最难的数独。当然了,对于计算机程序来说,只要算法是对的,难不难就不知道了,反正计算机又不累。回溯算法基本上就是穷举...
  • tianyaleixiaowu
  • tianyaleixiaowu
  • 2016年03月17日 15:22
  • 6119

C回溯算法高效解标准数独

C回溯算法高效解标准数独
  • huang826336127
  • huang826336127
  • 2017年04月03日 13:15
  • 14567

Matlab 求解数独的程序

数独是近年来非常流行的游戏,有很多解法,在mathworks的file exchange里面可以找到很多,但我觉得下面的这个递归解法是比较简洁的。 来自Mathworks   function ...
  • qshbbh
  • qshbbh
  • 2013年03月17日 19:53
  • 3052
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode37.Sudoku solver电脑来解数独
举报原因:
原因补充:

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