三阶幻方
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int vis[15],a[5][5];
void dfs(int x,int y){
int i;
if(x==4&&y==1){
for(i=1;i<=3;i++){
if(a[i][3]+a[i][2]+a[i][1]!=15)return ;
if(a[1][i]+a[2][i]+a[3][i]!=15)return ;
}
if(a[1][1]+a[2][2]+a[3][3]!=15||a[1][3]+a[2][2]+a[3][1]!=15)return ;
for(i=1;i<=3;i++){
cout<<a[i][1]<<' '<<a[i][2]<<' '<<a[i][3]<<endl;
}
cout<<endl;
return;
}
for(i=1;i<=9;i++){
if(vis[i])continue;
vis[i]=1;
a[x][y]=i;
if(y==3)
dfs(x+1,1);
else
dfs(x,y+1);
vis[i]=0;
}
}
int main(){
dfs(1,1);
return 0;
}