大概是为了让我在某款数独游戏上取得rank1而写的程序(逃
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
const ll mod=998244353;
const ll inf=0x3f3f3f3f;
const int n=9;
int a[n+1][n+1];
int b[n+1][n+1];
int ro[n+1][n+1]; //hang
int co[n+1][n+1];
int sq[n+1][n+1];
vector<pair<int,int>>seq;
int getsq(int i,int j){
int g=sqrt(n);
return floor((i-1)/g)*g+1+floor((j-1)/g);
}
void show(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//if(b[i][j]==1)
cout<<a[i][j]<<' ';
//else cout<<' ';
}
cout<<endl;
}
}
int flag=0;
void dfs(int step){
//show();
if(step>=seq.size()){
flag=1;
show();
return;
}
if(flag) return;
int i=seq[step].first;
int j=seq[step].second;
for(int k=1;k<=9;k++){
if(!ro[i][k]&&!co[j][k]&&!sq[getsq(i,j)][k]){
a[i][j]=k;
ro[i][k]=co[j][k]=sq[getsq(i,j)][k]=1;
dfs(step+1);
ro[i][k]=co[j][k]=sq[getsq(i,j)][k]=0;
}
}
}
int main(){
std::ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
freopen("1.txt","r",stdin);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
ro[i][j]=co[i][j]=sq[i][j]=0;
}
}
char s[n+1];
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=n;j++){
a[i][j]=int(s[j-1]-'0');
ro[i][a[i][j]]=1;
co[j][a[i][j]]=1;
sq[getsq(i,j)][a[i][j]]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==0){
seq.push_back(make_pair(i,j));
b[i][j]=1;
}
}
}
dfs(0);
return 0;
}