tijie
2023-08-19 10:34:19
发布于:广东
32阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
#define N 1001
#define Q 0x3f3f3f3f
int a[N][N],n=9,row[N][N],col[N][N],cir[N][N];
vector<int>b;
struct node{
int hang,num;
}w[N];
int sum[N],cnt=0,maxx=-1,minn=Q;
void dfs(int xx,int y){
int x=w[xx].hang;
if(xx==9){
int ans=0;
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
ans+=a[i][j]*min(10-abs(i-4),10-abs(j-4));
}
}
maxx=max(maxx,ans);
return;
}
if(y==9){
dfs(xx+1,0);
}if(a[x][y]){
dfs(xx,y+1);
}else{
for(int i=1;i<=9;i++){
if(row[x][i]==0&&col[y][i]==0&&cir[x/3*3+y/3][i]==0){
a[x][y]=i;
row[x][i]=col[y][i]=cir[x/3*3+y/3][i]=1;
dfs(xx,y+1);
row[x][i]=col[y][i]=cir[x/3*3+y/3][i]=0;
a[x][y]=0;
}
}
}
}
bool cmp(node a1,node a2){
return a1.hang >a2.hang ;
}
int main(){
for(int i=0;i<n;i++){
w[i].hang=i;
for(int j=0;j<n;j++){
cin>>a[i][j];
if(a[i][j]){
w[i].num++;
row[i][a[i][j]]=1;
col[j][a[i][j]]=1;
cir[i/3*3+j/3][a[i][j]]=1;
}
}
}
sort(w+0,w+9,cmp);
dfs(0,0);
cout<<maxx;
return 0;
}
这里空空如也
有帮助,赞一个