http://cid-bedd4e3374a0446b.spaces.live.com/blog/cns!BEDD4E3374A0446B!184.entry
题目如下:
输入N, 打印 N*N 螺旋矩阵
比如 N = 3,打印:
1 2 3
8 9 4
7 6 5
N = 4,打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
递归解法如下:
+--------------------------> X 轴
| 1 2 3 4
| 12 13 14 5
| 11 16 15 6
| 10 9 8 7
|
Y轴
设元素1的坐标为(0,0),元素13的坐标为(1,1),……,任一元素的坐标为(x,y)
以下为完整代码:
//功能:打印螺旋矩阵
//参数说明:matrix :螺旋矩阵 (x,y) :第一个元素的坐标
// start :第一个元素的值 n :矩阵的大小
void SetMatrix(int **matrix, int x, int y, int start, int n) {
int i, j;
if (n <= 0)
return;
if (n == 1) {
matrix[x][y] = start;
return;
}
for (i = x; i < x + n-1; i++) /* 上部 */
matrix[y][i] = start++;
for (j = y; j < y + n-1; j++) /* 右边 */
matrix[j][x+n-1] = start++;
for (i = x+n-1; i > x; i--) /* 底部 */
matrix[y+n-1][i] = start++;
for (j = y+n-1; j > y; j--) /* 左边 */
matrix[j][x] = start++;
SetMatrix(matrix, x+1, y+1, start, n-2); /* 递归 */
}
void main() {
int i, j;
int n;
int **matrix; //螺旋矩阵(二维数组)
scanf("%d", &n);
matrix = (int **)malloc(n * sizeof(int *)); //为矩阵分配空间
for (i = 0; i<n; i++)
matrix[i] = (int *)malloc(n * sizeof(int));
SetMatrix(matrix, 0, 0, 1, n);
//打印螺旋矩阵
for(i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%4d", matrix[i][j]);
printf("/n");
}
}
输入N, 打印 N*N 螺旋矩阵
比如 N = 3,打印:
1 2 3
8 9 4
7 6 5
N = 4,打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
递归解法如下:
+--------------------------> X 轴
| 1 2 3 4
| 12 13 14 5
| 11 16 15 6
| 10 9 8 7
|
Y轴
设元素1的坐标为(0,0),元素13的坐标为(1,1),……,任一元素的坐标为(x,y)
以下为完整代码:
//功能:打印螺旋矩阵
//参数说明:matrix :螺旋矩阵 (x,y) :第一个元素的坐标
// start :第一个元素的值 n :矩阵的大小
void SetMatrix(int **matrix, int x, int y, int start, int n) {
int i, j;
if (n <= 0)
return;
if (n == 1) {
matrix[x][y] = start;
return;
}
for (i = x; i < x + n-1; i++) /* 上部 */
matrix[y][i] = start++;
for (j = y; j < y + n-1; j++) /* 右边 */
matrix[j][x+n-1] = start++;
for (i = x+n-1; i > x; i--) /* 底部 */
matrix[y+n-1][i] = start++;
for (j = y+n-1; j > y; j--) /* 左边 */
matrix[j][x] = start++;
SetMatrix(matrix, x+1, y+1, start, n-2); /* 递归 */
}
void main() {
int i, j;
int n;
int **matrix; //螺旋矩阵(二维数组)
scanf("%d", &n);
matrix = (int **)malloc(n * sizeof(int *)); //为矩阵分配空间
for (i = 0; i<n; i++)
matrix[i] = (int *)malloc(n * sizeof(int));
SetMatrix(matrix, 0, 0, 1, n);
//打印螺旋矩阵
for(i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%4d", matrix[i][j]);
printf("/n");
}
}