/*
题目:幻方
方法:方法有很多种的,我这里使用深搜,注意方向
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define manx 33
int x[manx][manx],n;
int flag;
void dfs(int a,int b,int ans){
if(flag || x[a][b]) return;
if(ans==n*n){
x[a][b]=ans; flag=1;
return ;
}
x[a][b] = ans;
int a1=a, b1=b;
//对数据预先处理好
if(a+1>n) a=1;
else a=a+1;
if(b+1>n) b=1;
else b=b+1;
/
dfs(a,b,ans+1);
dfs(a1-1,b1,ans+1);
}
int main(){
while(cin>>n,n){
flag=0;
memset(x,0,sizeof(x));
dfs(n,n/2+1,1);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%3d",x[i][j]);
}
printf("\n");
}
printf("\n");
}
}
ZJUT 1005 幻方
最新推荐文章于 2019-05-26 16:19:24 发布