1 每一次一个外圈的遍历可以分成四步,左上到右上 -》 右上到右下 -》 右下到左下 -》 左下到左上 2 然后循环上面步骤,直到矩阵打印完为止 3 通过 ai,aj 来控制层数 4 5 #include <iostream> 6 #include <vector> 7 #include <algorithm> 8 9 using namespace std; 10 11 int main() 12 { 13 //vector<vector<int> > v(4,vector<int>(4)); 14 int n,m; 15 cin>>n>>m; 16 vector<vector<int> > v; 17 vector<int> d; 18 for(int i=0;i<n;i++){ 19 for(int j=0;j<m;j++){ 20 int flag; 21 cin>>flag; 22 d.push_back(flag); 23 } 24 v.push_back(d); 25 d.clear(); 26 } 27 int maxi =v.size(),maxj =v[0].size(); 28 int cot =0; 29 int ai,aj,i,j; 30 ai =0; 31 aj =0; 32 cout<<endl; 33 while(1){ 34 for(j = aj ;j < maxj-aj; j++){ 35 cout<<v[ai][j]<<" "; 36 cot++; 37 } 38 if(cot == maxi*maxj) break; 39 for(i = ai+1 ;i < maxi - ai ; i++){ 40 cout<<v[i][maxj-aj-1]<<" "; 41 cot++; 42 } 43 if(cot == maxi*maxj) break; 44 for(j = maxj-2-aj; j>=aj;j--){ 45 cout<<v[maxi-ai-1][j]<<" "; 46 cot++; 47 } 48 if(cot == maxi*maxj) break; 49 for(i = maxi - ai -2 ;i>= ai+1 ; i--){ 50 cout<<v[i][aj]<<" "; 51 cot++; 52 } 53 if(cot == maxi*maxj) break; 54 ai ++; 55 aj ++; 56 } 57 return 0; 58 }
原文:https://www.cnblogs.com/sanshiya/p/12210314.html