首页 > 其他 > 详细

acm之顺时针打印矩阵

时间:2020-01-18 23:01:07      阅读:82      评论:0      收藏:0      [点我收藏+]
 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 }

acm之顺时针打印矩阵

原文:https://www.cnblogs.com/sanshiya/p/12210314.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!