代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,b[105],a[11][11];
bool vis[105];
long long s,c;
void printf(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return ;
}
bool hang(int x,int i){
for(int j=1;j<=n-1;j++) c+=a[x][j];
if(c==s) return 0;
return 1;
}
bool lie(int y,int i){
for(int j=1;j<=n-1;j++) c+=a[j][y];
if(c==s) return 0;
return 1;
}
bool fuduijiaoxian(int i){
for(int j=n-1;j>=1;j--) c+=a[j][n-j+1];
if(c==s) return 0;
return 1;
}
bool zhengduijiaoxian(int i){
for(int j=n-1;j>=1;j--) c+=a[j][j];
if(c==s) return 0;
return 1;
}
int dfs(int x,int y){
if(x==n+1&&y==1){
printf();
exit(0);
}
for(int i=1;i<=n*n;i++){
if(!vis[i]){
if(y==n){
c=b[i];
if(hang(x,i)) continue;
}
if(x==n){
c=b[i];
if(lie(y,i)) continue;
}
if(x==n&&y==1){
c=b[i];
if(fuduijiaoxian(i)) continue;
}
if(x==n&&y==n){
c=b[i];
if(zhengduijiaoxian(i)){
continue;
}
}
vis[i]=1;
a[x][y]=b[i];
if(y!=n) dfs(x,y+1);
else dfs(x+1,1);
vis[i]=0;
a[x][y]=0;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n*n;i++) cin>>b[i],s+=b[i];
s/=n;
cout<<s<<endl;
sort(b+1,b+n*n+1);
if(n==1){
cout<<b[1];
return 0;
}
dfs(1,1);
return 0;
}
请问大佬,为何RE,谢谢!