您的位置:首页 > 其它

Leetcode-Sudoku Solver

2015-07-14 20:28 288 查看
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.





题意:将一个数独补充完整。

解题思路:从第一个空格开始,列出可以填充的数字,依次进行尝试。

bool ss(vector<vector<char>>& b)
{
int ii = 0;
int jj = 0;
bool f = false;
for (int i = 0; i < b.size(); ++i)
{
for (int j = 0; j < b[i].size(); ++j)
{
if (b[i][j] == '.')
{
ii = i;
jj = j;
f = true;
break;
}
}
if (f)
{
break;
}
}
if (f)
{
int a[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

for (int i = 0; i < b[0].size(); ++i)
{
if (b[ii][i] != '.')
{
a[b[ii][i] - '0']++;
}
if (b[i][jj] != '.')
{
a[b[i][jj] - '0']++;
}
}
int ib = ii / 3;
ib=ib*3;
int jb = jj / 3;
jb=jb*3;
for (int i = ib; i < ib + 3; ++i)
{
for (int j = jb; j < jb + 3; ++j)
{
if (b[i][j] != '.')
{
a[b[i][j] - '0']++;
}
}
}
for (int i = 1; i < 10; ++i)
{
if (a[i] == 0)
{
b[ii][jj] = i + '0';
if (ss(b))
{
return true;
}
else
{
b[ii][jj] = '.';
}
}
}
return false;
}
return true;
}
void solveSudoku(vector<vector<char>>& board) {
bool f=ss(board);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: