博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - 37. Sudoku Solver
阅读量:7261 次
发布时间:2019-06-29

本文共 2212 字,大约阅读时间需要 7 分钟。

37. Sudoku Solver 

 ----------------------------------------------------------------------------

Mean: 

求解数独.

analyse:

只是9宫格的数独,而且测试数据都不难,所以可以直接使用递归求解,类似于N-Queue问题.

但如果宫格数较多,则需要使用Dancing-Link精确覆盖算法来求解.

Time complexity: O(N)

 

view code

/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
*       Author: crazyacking
*       Date  : 2016-03-02-18.53
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <bits/stdc++.h>
#include <windows.h>
using
namespace
std;
typedef
long
long(
LL);
typedef
unsigned
long
long(
ULL);
const
double
eps(
1e-8);
class
Solution
{
public
:
   
void
solveSudoku(
vector
<
vector
<
char
>>&
board)
   
{
       
recursiveSolve(
board);
   
}
   
bool
recursiveSolve(
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
]
=
static_cast
<
char
>(
k
+
'0');
                       
if(
isValid(
board
,
i
,
j)
&&
recursiveSolve(
board))
                           
return
true;
                       
board
[
i
][
j
]
=
'.';
                   
}
                   
return
false;
               
}
           
}
       
}
       
return
true;
   
}
   
bool
isValid(
const
vector
<
vector
<
char
>>&
board
,
const
int
r1
,
const
int
c1)
const
   
{
       
for(
int
i
=
0;
i
<
9;
++
i)
       
{
           
if(
i
!=
r1
&&
board
[
i
][
c1
]
==
board
[
r1
][
c1
])
               
return
false;
           
if(
i
!=
c1
&&
board
[
r1
][
i
]
==
board
[
r1
][
c1
])
               
return
false;
       
}
       
int
rowBegin
=
r1
/
3
*
3;
       
int
colBegin
=
c1
/
3
*
3;
       
for(
int
i
=
rowBegin;
i
<
rowBegin
+
3;
++
i)
       
{
           
for(
int
j
=
colBegin;
j
<
colBegin
+
3;
++
j)
           
{
               
if(
i
!=
r1
&&
j
!=
c1
&&
board
[
i
][
j
]
==
board
[
r1
][
c1
])
                   
return
false;
           
}
       
}
       
return
true;
   
}
};
int
main()
{
   
freopen(
"H:
\\
Code_Fantasy
\\
in.txt"
,
"r"
,
stdin);
   
Solution
solution;
   
vector
<
vector
<
char
>>
ve;
   
string s;
   
while(
cin
>>s)
   
{
       
vector
<
char
>
tempVe;
       
for(
int
i
=
0;
i
<s
.
length();
++
i)
           
tempVe
.
push_back(s
[
i
]);
       
ve
.
push_back(
tempVe);
   
}
   
solution
.
solveSudoku(
ve);
   
return
0;
}
/*
*/

转载于:https://www.cnblogs.com/crazyacking/p/5238074.html

你可能感兴趣的文章
婴儿患小儿脐疝肚子鼓起 父亲竟一刀划开肚脐“放气”
查看>>
英首相提交“脱欧”替代方案 重申不寻求二次公投
查看>>
不放弃!西班牙两岁男童落井8天 救援队仍钻井营救
查看>>
兰州火车站扩能改造完成 正式投入使用
查看>>
宁夏首票关税保证保险报关单顺利通关
查看>>
贷款增速达12.6% 银行业服务实体经济能力提升
查看>>
南方持续强降雪 京广高铁部分列车晚点1到3小时
查看>>
阿里程序员吐槽:玩命赚钱依旧抵不过拆迁户,奋斗的意义呢
查看>>
「算法」如何实现大整数相乘?(下)
查看>>
Oracle总结【SQL细节、多表查询、分组查询、分页】
查看>>
具有代表性的 HTTP 状态码
查看>>
iOS 组件化 —— 路由设计思路分析
查看>>
扯扯ID
查看>>
mp-redux:解耦小程序中的业务与视图,让测试更容易
查看>>
Sql注入
查看>>
如何用Python写一个贪吃蛇AI
查看>>
Docker 镜像优化与最佳实践
查看>>
谁动了我的 DOM??!
查看>>
web圣杯布局
查看>>
玩转Koa -- koa-router原理解析
查看>>