首页 > 代码库 > 螺旋打印二维数组
螺旋打印二维数组
void main() { // 初始的区间坐标 int startX = 0, endX = 4; int startY = 0, endY = 5; while(startX<=endX && startY<=endY) // 循环条件 { int i; for(i=startX; i<=endX; i++) // 输出上边的行 cout << arr[startY][i] << " "; startY ++; // 行的开始坐标增加 for(i=startY; i<=endY; i++) // 输出右边的列 cout << arr[i][endX] << " "; endX --; // 列的结束坐标减小 for(i=endX; i>=startX; i--) // 输出下边边的行 cout << arr[endY][i] << " "; endY --; // 行的结束坐标减小 for(i=endY; i>=startY; i--) // 输出左边的列 cout << arr[i][startX] << " "; startX ++; // 列的开始坐标增加 } }
递归解法如下(http://blog.csdn.net/blackeagle_/article/details/606341):
+--------------------------> 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"); } }
螺旋打印二维数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。