#include<bits/stdc++.h>
#define int long long
using namespace std;
int Map[10][10];
struct node{
int tong[10];
}t[10][10];
int zb[90][3],jzb,flag;
void wuy(int xx,int yy,int c)
{
int x=(xx/3)*3+1,y=(yy/3)*3+1;
t[x][y].tong[c]++;
t[x][y+2].tong[c]++;
t[x+2][y].tong[c]++;
t[x+2][y+2].tong[c]++;
for(int i=1;i<=9;i++)
t[i][yy].tong[c]++,t[xx][i].tong[c]++;
t[xx][yy].tong[c]--;
}
void wuy2(int xx,int yy,int c)
{
int x=(xx/3)*3+1,y=(yy/3)*3+1;
t[x][y].tong[c]--;
t[x][y+2].tong[c]--;
t[x+2][y].tong[c]--;
t[x+2][y+2].tong[c]--;
for(int i=1;i<=9;i++)
t[i][yy].tong[c]--,t[xx][i].tong[c]--;
t[xx][yy].tong[c]++;
}
void dfs(int k,int x,int y)
{
for(int i=1;i<=9;i++)
{
if(t[x][y].tong[i]==0)
{
wuy(x,y,i);
Map[x][y]=i;
if(k==jzb)
{
flag=1;
return ;
}
dfs(k+1,zb[k+1][1],zb[k+1][2]);
if(flag==1) return ;
wuy2(x,y,i);
}
}
}
signed main(){
for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) cin>>Map[i][j];
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
if(Map[i][j]==0)
{
jzb++;
zb[jzb][1]=i,zb[jzb][2]=j;
cout<<jzb<<' '<<zb[2][2]<<endl;
//cout<<i<<' '<<j<<' '<<zb[jzb][1]<<' '<<zb[jzb][2]<<endl;
continue ;
}
else
wuy(i,j,Map[i][j]);
}
}
dfs(1,zb[1][1],zb[1][2]);
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++) cout<<Map[i][j]<<' ';
cout<<endl;
}
}
输入
8 0 0 0 0 0 0 0 0
0 0 3 6 0 0 0 0 0
0 7 0 0 9 0 2 0 0
0 5 0 0 0 7 0 0 0
0 0 0 0 4 5 7 0 0
0 0 0 1 0 0 0 3 0
0 0 1 0 0 0 0 6 8
0 0 8 5 0 0 0 1 0
0 9 0 0 0 0 4 0 0
之后为什么zb[2][2]的值会在jzb==48的时候变成4,我没有对zb数组还有什么多余的操作啊! 题目在这