调了一下午,枯了
#include<bits/stdc++.h>
using namespace std;
struct hang{
int num,sum;
}yo[10];
struct spot{
int x,y,score,gong;
}a[10];
int mapp[10][10];
int h[10][10];
int l[10][10];
int g[10][10];
int now;
int ans;
int u;
int score(int x,int y){
if(x==1||y==1||x==9||y==9)return 6;
else if(x==2||y==2||x==8||y==8)return 7;
else if(x==3||y==3||x==7||y==7)return 8;
else if(x==4||y==4||x==6||y==6)return 9;
else return 10;
}
int getgong(int x,int y){
if(x<=3){
if(y<=3) return 1;
else if(y<=6) return 2;
else return 3;
}
else if(x<=6){
if(y<=3) return 4;
else if(y<=6) return 5;
else return 6;
}
else{
if(y<=3) return 7;
else if(y<=6) return 8;
else return 9;
}
}
void dfs(int o,int sc){
if(o==u){
ans=max(sc,ans);
return;
}
for(int i=1;i<=9;i++){
if(h[a[o].x][i]==0&&l[a[o].y][i]==0&&g[a[o].gong][i]==0){
h[a[o].x][i]=l[a[o].y][i]=g[a[o].gong][i]=1;
dfs(o+1,sc+(a[o].score*i));
h[a[o].x][i]=l[a[o].y][i]=g[a[o].gong][i]=0;
}
}
}
bool cmp(hang x,hang y){
return x.sum<y.sum;
}
int main(){
ans=-1;
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cin>>mapp[i][j];
if(mapp[i][j]>0){
h[i][mapp[i][j]]=1;
l[j][mapp[i][j]]=1;
g[getgong(i,j)][mapp[i][j]]=1;
now+=score(i,j)*mapp[i][j];
}
else yo[i].sum++;
}
yo[i].num=i;
}
sort(yo+1,yo+10,cmp);
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(mapp[yo[i].num][j]==0){
u++;
a[u].x=yo[i].num,a[u].y=j,a[u].gong=getgong(a[u].x,a[u].y),a[u].score=score(a[u].x,a[u].y);
}
}
}
dfs(1,0);
if(ans==-1){
cout<<-1;
return 0;
}
cout<<ans+now;
// cout<<u<<endl;
// for(int i=1;i<=u;i++) cout<<a[i].x<<' '<<a[i].y<<' '<<a[i].gong<<' '<<a[i].score<<endl;
return 0;
}
求帮忙