以下N阶螺旋矩阵的代码是楼主工作之余写的,平时就喜欢写写小程序(原来网上都已经有了)。
和大家分享下吧。ps:欢迎评论,不喜勿喷。
#include <stdio.h>
#include <stdlib.h>
void get_magic(int, int **);
void put_magic(int, int **);
int main(int argc, char **argv)
{
int i;
int num,**tbl;
if (argc != 2) return(1);
num=atoi(argv[1]);
if (num == 0) return(1);
if(num == 1) {
printf("1\n");
return(0);
}
tbl=(int **)malloc(sizeof(int *)*num);
for(i=0;i<num;i++) tbl[i]=(int *)malloc(sizeof(int)*num);
get_magic(num,tbl);
put_magic(num,tbl);
for(i=0;i<num;i++) free(tbl[i]);
free(tbl);
return(0);
}
void get_magic(int n, int **tbl)
{
int i,j,c;
c=n/2;
if(n%2) tbl[n/2][n/2]=n*n;
for(i=0;i<c;i++){
for(j=0;j<n-1-2*i;j++){
tbl[i][j+i]=i*(n-i)*4+1+j;
tbl[i+j][n-1-i]=i*(n-i)*4+1+(n-2*i)-1+j;
tbl[n-1-i][n-1-i-j]=i*(n-i)*4+1+((n-2*i)-1)*2+j;
tbl[n-1-i-j][i]=i*(n-i)*4+1+((n-2*i)-1)*3+j;
}
}
return;
}
void put_magic(int n, int **tbl)
{
int i,j;
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
printf("%3d",tbl[i][j]);
printf("\n");
}
return;
}