评测记录:
AC AC WA AC TLE
有无大佬帮忙看看代码
#include<bits/stdc++.h>
using namespace std;
int a[25],n,vis[25];
bool is_ok(int arr[],int& b)
{
int base=-1;
for(int i=1; i<=n; i++)
{
int line=0;
for(int j=1; j<=n; j++)
line+=arr[(i-1)*n+j];
if(base!=-1 && line!=base) return false;
base=line;
}
for(int i=1; i<=n; i++)
{
int cols=0;
for(int j=1; j<=n; j++)
cols+=arr[i+(j-1)*n];
if(base!=-1 && cols!=base) return false;
base=cols;
}
int left=0,right=0;
for(int i=1; i<=n; i++)
{
left+=arr[(n+1)*i-3];
right+=arr[n*(n-i)+i];
}
if(left!=base || right!=base)
return false;
b=base;
return true;
}
void dfs(int idx,int s[])
{
if(idx>n*n)
{
int x=0;
if(is_ok(s,x))
{
cout<<x<<endl;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
cout<<s[(i-1)*n+j]<<' ';
puts("");
}
exit(0);
}
}
else
{
for(int i=1; i<=n*n; i++)
{
if(!vis[i])
{
vis[i]=1;
s[idx]=a[i];
dfs(idx+1,s);
s[idx]=0;
vis[i]=0;
}
}
}
}
int main()
{
cin>>n;
for(int i=1; i<=n*n; i++)
cin>>a[i];
sort(a+1,a+n*n+1);
int s[100]={};
dfs(1,s);
return 0;
}