//这里介绍一种处理矩阵打印等一系列问题的常用做法:分圈处理
#include<bits/stdc++.h>
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];
}
int x1=0,y1=0,x2=n-1,y2=m-1;//左上角和右下角
int sum=0;
while(x1<=x2&&y1<=y2){
//把矩阵看成由一个个圈组成,对每一个圈进行单独打印
if(x1==x2){//只有一行时
for(int j=y1;j<=y2;j++){
cout<<arr[x1][j]<<" ";
sum++;
}
}
else if(y1==y2){//只有一列时
for(int i=x1;i<=x2;i++){
cout<<arr[i][y1]<<" ";
sum++;
}
}
else{
//从左到右
int i=x1,j=y1;
while(j<=y2){
cout<<arr[i][j]<<" ";
sum++;
j++;
}
//从上到下
i=x1+1,j=y2;
while(i<=x2){
cout<<arr[i][j]<<" ";
i++;
sum++;
}
//从右到左
i=x2,j=y2-1;
while(j>=y1){
cout<<arr[i][j]<<" ";
j--;
sum++;
}
//从下到上
i=x2-1,j=y1;
while(i>x1){
cout<<arr[i][j]<<" ";
i--;
sum++;
}
}
x1++;
y1++;
x2--;
y2--;
}
return 0;
}
#include<bits/stdc++.h>
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];
}
int x1=0,y1=0,x2=n-1,y2=m-1;//左上角和右下角
int sum=0;
while(x1<=x2&&y1<=y2){
//把矩阵看成由一个个圈组成,对每一个圈进行单独打印
if(x1==x2){//只有一行时
for(int j=y1;j<=y2;j++){
cout<<arr[x1][j]<<" ";
sum++;
}
}
else if(y1==y2){//只有一列时
for(int i=x1;i<=x2;i++){
cout<<arr[i][y1]<<" ";
sum++;
}
}
else{
//从左到右
int i=x1,j=y1;
while(j<=y2){
cout<<arr[i][j]<<" ";
sum++;
j++;
}
//从上到下
i=x1+1,j=y2;
while(i<=x2){
cout<<arr[i][j]<<" ";
i++;
sum++;
}
//从右到左
i=x2,j=y2-1;
while(j>=y1){
cout<<arr[i][j]<<" ";
j--;
sum++;
}
//从下到上
i=x2-1,j=y1;
while(i>x1){
cout<<arr[i][j]<<" ";
i--;
sum++;
}
}
x1++;
y1++;
x2--;
y2--;
}
return 0;
}