rt
样例 dfs 至第 40 个空格左右时无法继续
#include<bits/stdc++.h>
using namespace std;
int G[15][15],cnt,cur[15][15];
void dfs(int dep)
{
if(dep>cnt)
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)cout<<cur[i][j]<<' ';
cout<<'\n';
}
exit(0);
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
if(!cur[i][j])
{
bool used[15]={};
for(int k=1;k<=9;k++)used[cur[k][j]]=used[cur[i][k]]=true;
for(int k=(i-1)/3*3+1;k<=(i-1)/3*3+3;k++)
{
for(int l=(j-1)/3*3+1;l<=(j-1)/3*3+3;l++)used[cur[k][l]]=true;
}
bool flag=false;
for(int k=1;k<=9;k++)
{
if(!used[k])
{
// printf("%d: (%d, %d), %d\n",dep,i,j,k);
cur[i][j]=k;
used[k]=true;
dfs(dep+1);
cur[i][j]=0;
flag=true;
}
}
if(!flag)return;
}
}
}
}
int main()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
cin>>G[i][j];
if(!G[i][j])cnt++;
cur[i][j]=G[i][j];
}
}
dfs(1);
return 0;
}