簡單易懂矩陣螺旋列印

2020-08-14 21:08:14

簡單易懂矩陣螺旋列印

給定一個 m 行、n 列的矩陣,請按照順時針螺旋的順序輸出矩陣中所有的元素。
在这里插入图片描述

輸入格式
首先在第一行輸入 2 個整數,分別對應題目描述中的 mm 和 nn(1 \leq m,n \leq 1001≤m,n≤100),之間用一個空格分隔。接下來輸入 m 行,每行包含 n 個整數
輸出格式
輸出爲一行,包括 m\times nm×n 個整數,按照題目要求的順序依次輸出所有矩陣元素,任意兩個整數之間用一個空格分隔,最後一個整數後面沒有空格。

#include <stdio.h>
int main() {
    int matrix[100][100];
    int m;
    int n;
    scanf("%d %d",&m,&n);
    for(int i = 0;i < m; ++i){
        for(int j = 0;j < n; ++j){
            scanf("%d ",&matrix[i][j]);
        }
    }
    int i = 0,j = 0,count = 0,k = m * n;
    //上下左右四個邊界
    int top = 0,left = 0;
    int bottom = m-1,right = n-1 ;
    while(1){
          //從左上開始,列印行
        for(i = top,j = left; j <= right; ++j){
            printf("%d",matrix[i][j]);
            count++;
            if(count == k) return 0;
            printf(" ");
        }
        ++top;//更新邊界條件
        //從右上開始列印列
        for(i = top,j = right;i <= bottom; ++i )
        {
            printf("%d",matrix[i][j]);
            count++;
            if(count == k) return 0;
            printf(" ");
        }
        --right;
        for(i = bottom,j = right;j >= left; --j )
        {
            printf("%d",matrix[i][j]);
            count++;
            if(count == k) return 0;
            printf(" ");
        }
        --bottom;
         for(i = bottom,j = left;i >= top; --i )
        {
            printf("%d",matrix[i][j]);
             count++;
            if(count == k) return 0;
             printf(" ");
        }
        ++left;
    }
    return 0;
}