螺旋矩阵,我在打印螺旋矩阵顺序时得到了额外的元素。不知道为什么?
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 个循环运行之前
// 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 个循环运行之前