1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | /* 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 12 11 */ #include <stdio.h> #include <stdlib.h> void generate(int **M, int x1, int y1, int x2, int y2, int x) { if(x1>x2) return; int i, j; for(i=x1, j=y1; j<y2; j++) M[i][j] = x++; for(i=x1, j=y2; i<x2; i++) M[i][j] = x++; for(i=x2, j=y2; j>y1; j--) M[i][j] = x++; for(i=x2, j=y1; i>x1; i--) M[i][j] = x++; generate(M, x1+1, y1+1, x2-1, y2-1, x); } void print(int **M, int n) { int i, j; for(i=0; i<n; i++) { for(j =0; j<n; j++) { printf("%d ", M[i][j]); } printf("\n"); } } void matrix(int n) { int **M = (int **) malloc(n*sizeof(int *)); int i = 0; for(i=0; i<n; ++i) M[i] = (int *) malloc (n*sizeof(int)); generate(M, 0, 0, n-1, n-1, 1); print(M, n); for(i=0; i<n; ++i) free(M[i]); free(M); } int main() { matrix(4); return 0; } |
August 25, 2010

没有看出什么来
本来也没啥,关键的地方是generate函数。练练手,呵呵。
你那边网速是不是超级快?