CCF 201412-2 Z字形扫描

试题编号: 201412-2
试题名称: Z字形扫描
时间限制: 2.0s
内存限制: 256.0MB
问题描述:
问题描述
  在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:

  对于下面的4×4的矩阵,
  1 5 3 9
  3 7 5 6
  9 4 6 4
  7 3 1 3
  对其进行Z字形扫描后得到长度为16的序列:
  1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
  请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。
输入格式
  输入的第一行包含一个整数n,表示矩阵的大小。
  输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。
输出格式
  输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。
样例输入
4
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
样例输出
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
评测用例规模与约定
  1≤n≤500,矩阵元素为不超过1000的正整数。

关键词:while(true),/xk

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main(){
 5     //freopen("in2.txt","r",stdin);
 6     int n;
 7     cin >> n;
 8     vector<vector<int> > v;
 9     vector<int> vr;
10     for(int i = 0;i<n;i++){
11         vr.clear();
12         for(int j = 0;j<n;j++){
13             int buf;
14             cin >> buf;
15             vr.push_back(buf);
16         }
17         v.push_back(vr);
18     }
19     int x = 0;
20     int y = 0;
21     int dir = 2;
22     while(true){
23         cout << v[y][x] << ' ';
24         if(x == n-1 && y == n-1){
25             break;
26         }
27         if(dir == 2){
28             x = x+1;
29         }
30         else if(dir == 3){
31             y = y+1;
32         }
33         else if(dir == 4){
34             x = x-1;
35             y = y+1;
36         }
37         else if(dir == 6){
38             x = x+1;
39             y = y-1;
40         }
41 
42         if(dir == 2){
43             if(y == 0){
44                 dir = 4;
45             }
46             else{
47                 dir = 6;
48             }
49         }
50         else if(dir == 3){
51             if(x == 0){
52                 dir = 6;
53             }
54             else{
55                 dir = 4;
56             }
57         }
58         else if(dir == 4){
59             if(y == n-1){
60                 dir = 2;
61             }
62             else if(x == 0){
63                 dir = 3;
64             }
65         }
66         else if(dir == 6){
67             if(x == n-1){
68                 dir = 3;
69             }
70             else if(y == 0){
71                 dir = 2;
72             }
73         }
74     }
75     return 0;
76 }

 

posted @ 2017-10-22 01:52  ywsswy  阅读(146)  评论(0编辑  收藏  举报