#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f1[12][12];
int f2[12][12];
int f3[12][12];
int c[12][12];
int map[12][12];
int cal[12][12];
int maxx=-1;
void dfs(int now)
{
int x,y;
int maxs=12;
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
if(map[i][j]==0)
{
int sum=0;
for(int k=1;k<=9;k++)
{
if(f1[j][k]==0&&f2[i][k]==0&&f3[(j-1)/3*3+(i-1)/3+1][k]==0)
sum++;
}
if(maxs>sum)
{
maxs=sum;
x=i;
y=j;
}
}
}
}
if(maxs==12)
{
int g=0;
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
g+=map[i][j]*cal[i][j];
maxx=max(maxx,g);
return;
}
if(maxs==0)
return;
for(int i=1;i<=9;i++)
{
if(f1[y][i]==0&&f2[x][i]==0&&f3[(y-1)/3*3+(x-1)/3+1][i]==0)
{
f1[y][i]++;
f2[x][i]++;
f3[(y-1)/3*3+(x-1)/3+1][i]++;
map[x][y]=i;
dfs(now+1);
map[x][y]=0;
f3[(y-1)/3*3+(x-1)/3+1][i]--;
f2[x][i]--;
f1[y][i]--;
}
}
}
int main()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
if(j==1||i==1||i==9||j==9)cal[i][j]=6;
else if(i==2||j==2||i==8||j==8)cal[i][j]=7;
else if(i==3||j==3||i==7||j==7)cal[i][j]=8;
else if(i==4||j==4||i==6||j==6)cal[i][j]=9;
else if(i==5||j==5)cal[i][j]=10;
}
}
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
scanf("%d",&map[i][j]);
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
f3[(j-1)/3*3+(i-1)/3+1][map[i][j]]++;
f1[j][map[i][j]]++;f2[i][map[i][j]]++;
}
}
dfs(1);
cout<<maxx<<endl;
return 0;
}
1447:靶形数独
最新推荐文章于 2024-03-29 18:02:33 发布