rt
大佬们救救我
#include<iostream>
using namespace std;
int target[10][10];
int lrg=5,mal=5;
int sce=10;
int test_h,test_l;
int ibu[5];
int form[10][10];
bool note[10][10];
int ans[10][10];
int ort[81][2];
int test_order;
int flag=0;
int next_h,next_l;
bool allow[10][10];
bool line[10][10];
bool sqare[10][10];
int order[5][33][2];
int _end;
int tot=0;
int numsqare(int x,int y){
return ((y-1)/3)+1+3*((x-1)/3);
}
void set_target(){
target[5][5]=10;
for(int j=0;j<5;j++){
lrg++;
mal--;
sce--;
for(int i=1;i<=9;i++){
target[mal][i]=sce;
target[lrg][i]=sce;
target[i][mal]=sce;
target[i][lrg]=sce;
}
}
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
ibu[10-target[i][j]]++;
order[10-target[i][j]][ibu[10-target[i][j]]][0]=i;
order[10-target[i][j]][ibu[10-target[i][j]]][1]=j;
}
}
int tol=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=32;j++){
if(order[i][j][0]!=0||order[i][j][1]!=0){
tol++;
if(test_h==order[i][j][0]&&test_l==order[i][j][1]){
test_order=tol;
}
ort[tol][0]=order[i][j][0];
ort[tol][1]=order[i][j][1];
}
}
}
}
void dfs(int nubr){
if(_end==1){
return ;
}else if(ort[nubr][0]==9&&ort[nubr][1]==9){
_end=1;
cout<<endl<<endl<<tot<<endl<<endl;
return ;
}else if((note[ort[nubr][0]][ort[nubr][1]]==1)||(ort[nubr][0]==0&&ort[nubr][1]==0)){
dfs(nubr+1);
return ;
}
for(int os=9;os>=1;os--){
if(allow[ort[nubr][1]][os]==0&&line[ort[nubr][0]][os]==0&&sqare[numsqare(ort[nubr][0],ort[nubr][1])][os]==0){
allow[ort[nubr][1]][os]=1;
line[ort[nubr][0]][os]=1;
sqare[numsqare(ort[nubr][0],ort[nubr][1])][os]=1;
ans[ort[nubr][0]][ort[nubr][1]]=os;
tot+=os*target[ort[nubr][0]][ort[nubr][1]];
dfs(nubr+1);
tot-=os*target[ort[nubr][0]][ort[nubr][1]];
allow[ort[nubr][1]][os]=0;
line[ort[nubr][0]][os]=0;
sqare[numsqare(ort[nubr][0],ort[nubr][1])][os]=0;
}
}
if(nubr==1){
cout<<-1<<endl;
_end=1;
}
return ;
}
int main(){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cin>>form[i][j];
if(form[i][j]!=0){
note[i][j]=1;
allow[j][form[i][j]]=1;
line[i][form[i][j]]=1;
sqare[numsqare(i,j)][form[i][j]]=1;
ans[i][j]=form[i][j];
}
}
}
set_target();
dfs(1);
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
}