仅限九宫格
#include<bits/stdc++.h>
using namespace std;
const int N=11;
int a[N][N];
bool b[N][N],l[N][N],r[N][N];
inline void print()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
cout<<a[i][j]<<" ";
}
cout<<'\n';
}
exit(0);
}
inline void dfs(int x,int y)
{
if(a[x][y]!=0)
{
if(x==9 and y==9)
print();
if(y==9)
dfs(x+1,1);
else dfs(x,y+1);
}
else
{
for(int i=1;i<=9;i++)
{
if(l[x][i] or r[i][y] or b[(x-1)/3*3+(y+2)/3][i]) continue;
l[x][i]=r[i][y]=b[(x-1)/3*3+(y+2)/3][i] =true;
a[x][y]=i;
if(x==9 and y==9)
print();
if(y==9)
dfs(x+1,1);
else dfs(x,y+1);
a[x][y]=0;
l[x][i]=r[i][y]=b[(x-1)/3*3+(y+2)/3][i]=false;
}
}
}
inline void solve()
{
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
cin>>a[i][j];
if(a[i][j]!=0)
{
int t=a[i][j];
l[i][t]=r[t][j]=b[(i-1)/3*3+(j+2)/3][t]=true;
}
}
dfs(1,1);
}
int main()
{
solve();
return 0;
}
输入没填好的数独题目,空位用0表示,每个位置之间要空格