#include <iostream>
#include <vector>
using namespace std;
void roundout(int m, int n, vector<vector<int>> mn){
int left,right,top,bottom;
left = 0;
right = n-1;
top = 0;
bottom = m-1;
int i,j;
int num = 0;
while(true){
if(left>right) break;
for(i=top,j=left;j<=right;j++) cout<<(num++==0?"":",")<<mn[i][j];
top +=1;
if(top>bottom) break;
for(i=top,j=right;i<=bottom;i++) cout<<(num++==0?"":",")<<mn[i][j];
right -=1;
if(left>right) break;
for(i=bottom,j=right;j>=left;j--) cout<<(num++==0?"":",")<<mn[i][j];
bottom -=1;
if(top>bottom) break;
for(i=bottom,j=left;i>=top;i--) cout<<(num++==0?"":",")<<mn[i][j];
left +=1;
}
cout<<endl;
}
int main() {
int m, n;
while(cin >> m >> n && m!=-1 && n!=-1){
vector<vector<int>> mn(m,vector<int>(n,0));
for(int i=0;i<m;i++){
for (int j=0; j<n; j++) {
int value;
cin >> mn[i][j];
}
}
roundout(m,n,mn);
}
}
// 64 位输出请用 printf("%lld")
拆分问题,每个while循环负责打印一圈,一圈则分别是上,右,下,左边,每遍历一条边,更新遍历边界,任何一条边遍历前要检查边界合法性,这是退出条件;最后注意处理一下打印的逗号分隔

京公网安备 11010502036488号