/*-----------------------------------> Name: Helix number. Date: 9:51 2008-4-2 Author: eryar@163.com Environment: TC2.0 >-----------------------------------*/ #include <stdlib.h> #define MAXSIZE 30 typedef struct dir{ int vertical; int horizontal; }Direction; void InitMatrix(int array[MAXSIZE][MAXSIZE],int edge); void OutMatrix (int array[MAXSIZE][MAXSIZE],int edge); void HelixMatrix(int array[MAXSIZE][MAXSIZE],int edge); main() { int edges; int matrix[MAXSIZE][MAXSIZE]; printf("eryar@163.com/n"); printf("Input the Matrix edge:"); scanf("%d",&edges); InitMatrix (matrix[MAXSIZE][MAXSIZE],edges); HelixMatrix(matrix[MAXSIZE][MAXSIZE],edges); printf("Output the Helix Matrix:/n"); OutMatrix (matrix[MAXSIZE][MAXSIZE],edges); printf("Press any key to halt..."); getch(); } void InitMatrix(int array[MAXSIZE][MAXSIZE],int edge) { int i,j; for(i=0;i<=edge+1;i++) for(j=0;j<=edge+1;j++) { if(i==0) array[i][j] = 1; /*add a fence.*/ else if(j==0) array[i][j] = 1; else if(i==edge+1) array[i][j] = 1; else if(j==edge+1) array[i][j] = 1; /*set a fence.*/ else array[i][j] = 0; } } void OutMatrix (int array[MAXSIZE][MAXSIZE],int edge) { int i,j; for(i=1;i<=edge;i++) { for(j=1;j<=edge;j++) printf("%5d",array[i][j]); printf("/n"); } } void HelixMatrix(int array[MAXSIZE][MAXSIZE],int edge) { int k,i=1,j=1; Direction Next[8]; Next[0].vertical = 0; Next[0].horizontal = 1;/*East*/ Next[1].vertical = 1; Next[1].horizontal = 0;/*South*/ Next[2].vertical = 0; Next[2].horizontal =-1;/*West*/ Next[3].vertical =-1; Next[3].horizontal = 0;/*North*/ Next[4].vertical =-1; Next[4].horizontal =-1;/*West North*/ Next[5].vertical =-1; Next[5].horizontal = 1;/*East North*/ Next[6].vertical = 1; Next[6].horizontal = 1;/*East South*/ Next[7].vertical = 1; Next[7].horizontal =-1;/*West South*/ array[i][j] = 1; for(k=2;k<=edge*edge;k++) { /*The condition of going East.*/ if(array[i+Next[0].vertical][j+Next[0].horizontal]==0&& array[i+Next[3].vertical][j+Next[3].horizontal]!=0 &&array[i+Next[4].vertical][j+Next[4].horizontal]!=0) { i += Next[0].vertical; j += Next[0].horizontal; array[i][j] = k; continue; } if( array[i+Next[1].vertical][j+Next[1].horizontal]==0&& /*Go South.*/ array[i+Next[5].vertical][j+Next[5].horizontal]!=0) { i += Next[1].vertical; j += Next[1].horizontal; array[i][j] = k; continue; } if( array[i+Next[2].vertical][j+Next[2].horizontal]==0&& /*Go West.*/ array[i+Next[6].vertical][j+Next[6].horizontal]!=0) { i += Next[2].vertical; j += Next[2].horizontal; array[i][j] = k; continue; } if( array[i+Next[3].vertical][j+Next[3].horizontal]==0&& /*Go North.*/ array[i+Next[7].vertical][j+Next[7].horizontal]!=0) { i += Next[3].vertical; j += Next[3].horizontal; array[i][j] = k; continue; } } } /*------------Test---------- Input the Matrix edge:5 Output the Helix Matrix: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 --------------Test--------*/