首页 > 代码库 > 螺旋打印二维数组

螺旋打印二维数组

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");
       }
}


螺旋打印二维数组