Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客: <但凡.
我的专栏: 《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C++修炼之路》
1、题目
2、题解
cpp
#include<iostream>
using namespace std;
const int N = 15;
int a[N][N];
bool st1[N][N], st2[N][N], st3[N][N][N];
bool dfs(int i,int j)
{
if (j == 9)
{
i++;
j = 0;
}
if (i == 9) return true;
if (a[i][j]) return dfs(i, j + 1);//如果不等于0说明填过了
for (int x = 1;x <= 9;x++)
{
if (st1[i][x] || st2[j][x] || st3[i / 3][j / 3][x]) continue;
st1[i][x] = st2[j][x] = st3[i / 3][j / 3][x] = true;
a[i][j] = x;
if (dfs(i, j + 1)) return true;
st1[i][x] = st2[j][x] = st3[i / 3][j / 3][x] = false;
a[i][j] = 0;
}
return false;
}
int main()
{
for (int i = 0;i <9;i++)
{
for (int j = 0;j < 9;j++)
{
cin >> a[i][j];
int x = a[i][j];
if (x)
{
st1[i][x] = st2[j][x] = st3[i/3][j/3][x] = true;
}
}
}
dfs(0,0);
for (int i = 0;i < 9;i++)
{
for (int j = 0;j < 9;j++)
{
cout<< a[i][j]<<" ";
}
cout << endl;
}
return 0;
}