acm之顺时针打印矩阵

 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 }

猜你喜欢

转载自www.cnblogs.com/sanshiya/p/12210314.html