【杭电】[1998]奇数阶魔方

这里写图片描述
这里写图片描述

上次校赛出了这一题
也是初中无意中学的一个幻方定理

这次用深搜写了一下

#include<stdio.h>
#include<string.h>
int map[20][20];
int n;
int cnt;
void dfs(int x,int y) {
    map[x][y]=++cnt;
    if(cnt==n*n)
        return ;
    int tx=x-1;
    int ty=y+1;
    if(tx<0)
        tx+=n;
    if(ty>=n)
        ty-=n;
    if(map[tx][ty]) {
        tx=x+1;
        ty=y;
    }
    if(tx<0)
        tx+=n;
    if(ty>=n)
        ty-=n;
    dfs(tx,ty);
    return ;
}
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%d",&n);
        memset(map,0,sizeof(map));
        cnt=0;
        map[0][n/2]=1;
        dfs(0,n/2);
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                printf("%4d",map[i][j]);
                if(j==n-1)
                    printf("\n");
            }
        }
    }
    return 0;
}

题目地址:【杭电】[1998]奇数阶魔方

posted @ 2016-04-14 07:01  BoilTask  阅读(18)  评论(1编辑  收藏  举报