1 2 3 4 5 6 7 8 9 10
36 37 38 39 40 41 42 43 44 11
35 64 65 66 67 68 69 70 45 12
34 63 84 85 86 87 88 71 46 13
33 62 83 96 97 98 89 72 47 14
32 61 82 95 100 99 90 73 48 15
31 60 81 94 93 92 91 74 49 16
30 59 80 79 78 77 76 75 50 17
29 58 57 56 55 54 53 52 51 18
28 27 26 25 24 23 22 21 20 19
#include
#include
#include
// Print clockwise matrix element, in C
// www.VictorFang.com
// 20100412
// n : current recursive call's matrix size
// x, y: start pt in this round
// start: first value to set in the matrix
void setmatrix(int** m, int x, int y, int start, int n){
int i,j;
// for even number
if(n<=0)
return;
// for odd number
if(n==1){
m[x][y] = start;
return;
}
for(i = x; i
m[y][i] = start++; // upper, to the right
for(j = y; j < y+n-1; j++ )
m[j][x+n-1] = start++; // right , downward
for(i=x+n-1; i>x; i--)
m[x+n-1][i] = start++; // lower, to the left
for(j = y+n-1; j>y; j--)
m[j][x] = start++; // left, upward
// recursive call the next inner cycle
setmatrix(m, x+1, y+1, start, n-2);
}
void main() {
FILE *fp;
int n = 10; // size of matrix, 5x5;
int i , j;
int** matrix = (int **) malloc( n*sizeof(int *) );
for(i = 0; i
matrix[i] = (int *) malloc(n*sizeof(int));
for(i = 0; i
for(j = 0; j
matrix[i][j] = 0;
// do the job!
setmatrix(matrix, 0 , 0, 1, n);
char fstr[10] ;
sprintf(fstr, "%d.txt", n);
fp = fopen(fstr, "w");
for(i = 0; i
for(j = 0; j
printf("%4d ", matrix[i][j]);
fprintf(fp, "%4d ", matrix[i][j]);
}
printf("\n");
fprintf(fp, "\n");
}
fclose(fp);
printf("Result is written into file: %s\n", fstr);
getchar();
}
No comments:
Post a Comment