螺旋矩阵,我在打印螺旋矩阵顺序时得到了额外的元素。不知道为什么?

Spiral matrix, i am getting extra elements while printing spiral matrix order. Don't know why?

// printing in spiral order matrix 
#include<iostream>
using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    int arr[n][m];
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cin>>arr[i][j];
        }
    }
    // print
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
    // spiral print
    int row_start=0,row_end=n-1,col_start=0,col_end=m-1;
    while(row_start<=row_end && col_start<=col_end){
        for(int j=col_start; j<=col_end; j++){
            cout<<arr[row_start][j]<<" ";
        }
        row_start++;
        for(int i=row_start; i<=row_end; i++){
            cout<<arr[i][col_end]<<" ";
        }
        col_end--;
        for(int j=col_end; j>=col_start; j--){
            cout<<arr[row_end][j]<<" ";
        }
        row_end--;
        for(int i=row_end; i>=row_start; i--){
            cout<<arr[i][col_start]<<" ";
        }
        col_start++;
    }
    return 0;
}

我的输出是:

PS C:\Users\anmol\Desktop\c++projectwork> ./a
3 4 
1 2 3 4 5 6 7 8 9 0 1 2
1 2 3 4 
5 6 7 8 
9 0 1 2
1 2 3 4 8 2 1 0 9 5 6 7 6

最后我得到了额外的“6”。 这不是必需的,但是只有当矩阵是矩形时才会出现这种类型的问题。 但代码适用于方阵。 请告诉我哪里错了..

假设你有一个下面的矩阵。让我们在下面的示例中干掉 运行 你的代码。

1 2 3 4

5 6 7 8

9 10 11 12

干运行

第一个 for 循环:打印 1 2 3 4 row_start=1,row_end=2,col_start=0,col_end=3

第二个for循环:打印8 12 row_start=1,row_end=2,col_start=0,col_end=2

第三次 for 循环:打印 11 10 9 row_start=1,row_end=1,col_start=0,col_end=2

第 4 个 for 循环:打印 5 row_start=1,row_end=1,col_start=1,col_end =2

while 循环的所有条件都为真 while 循环的第二次迭代:

第一个 for 循环:打印 6 7 row_start=2,row_end=1,col_start=1,col_end=2

第二个for循环:什么都不做row_start=2,row_end=1,col_start=1,col_end=1

第 3 个 for 循环:打印 6

你看到问题了吗?

你应该 运行 仅当

时才进行第三次 for 循环

"row_start < row_end"

同样你应该检查

"col_start<col_end"

在第 4 个循环运行之前