1. 程式人生 > >nyoj 33 蛇形填數

nyoj 33 蛇形填數

#include<stdio.h>
#include<string.h>
#define N 110
int dis[4][2]={1,0,0,-1,-1,0,0,1};
int main() {
    int n,i,j,k,h,flag;
     int map[N][N];
     while(scanf("%d",&n)!=EOF) {
        i=1;j=n;k=1;h=1;
        memset(map,-1,sizeof(map));
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            map[i][j]=0;
            map[1][n]=1;
            k++;
            i=1;j=n;
        while(k<=n*n) {
            i=i+dis[h-1][0];
            j=j+dis[h-1][1];
           if(map[i][j]!=0) {
            i-=dis[h-1][0];
            j-=dis[h-1][1];
            h++;
            if(h==5)
                h=1;
            else
            h%=5;
            i+=dis[h-1][0];
            j+=dis[h-1][1];
           }
           map[i][j]=k++;
        }
        for(i=1;i<=n;i++) {
                flag=0;
            for(j=1;j<=n;j++) {
           if(flag==0) {
                flag=1;
            printf("%d",map[i][j]);
           }
           else
            printf(" %d",map[i][j]);
            }
        printf("\n");
        }
     }
return 0;
}