#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循环负责打印一圈,一圈则分别是上,右,下,左边,每遍历一条边,更新遍历边界,任何一条边遍历前要检查边界合法性,这是退出条件;最后注意处理一下打印的逗号分隔