#include <iostream>
#include <stdio.h>
using namespace std;
char a[10][10];
int sd[10][10],flag;
bool check(int n,int num)
{
for (int i=0;i<9;i++)
if (sd[i][n%9]==num) return false;
for (int j=0;j<9;j++)
if (sd[n/9][j]==num) return false;
int x,y;
x=n/9/3*3;
y=n%9/3*3;
for (int i=x;i<x+3;i++)
for (int j=y;j<y+3;j++)
if (sd[i][j]==num) return false;
return true;
}
void dfs(int n)
{
if (n==81) {flag=1;return;}
if (sd[n/9][n%9]!=0) dfs(n+1);
else
{
for (int i=1;i<=9;i++)
{
if (check(n,i))
{
sd[n/9][n%9]=i;
dfs(n+1);
if (flag) return;
sd[n/9][n%9]=0;
}
}
}
}
int main()
{
int n;
freopen("in.txt","r",stdin);
cin>>n;
for (int i=1;i<=n;i++)
{
flag=0;
for (int j=0;j<9;j++) scanf("%s",a[j]);
for (int j=0;j<9;j++)
for (int k=0;k<9;k++) sd[j][k]=a[j][k]-'0';
dfs(0);
for (int j=0;j<9;j++)
{for (int k=0;k<9;k++) cout<<sd[j][k];cout<<endl;}
}
return 0;
}
题目大意:
将数独补充完整