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的正整数。

 

 1 //201412-2
 2 //Z字形扫描
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<algorithm>
 7 #include<iostream>
 8 #include<stack>
 9 using namespace std;
10 #define size 500
11 int map[size+5][size+5];
12 int main(){
13     //freopen("D:\\INPUT.txt","r", stdin);
14     int n;
15     int i,j;
16     cin>>n;
17     for(i=1;i<=n;i++){
18         for(j=1;j<=n;j++){
19             cin>>map[i][j];
20         }
21     }
22     //int sum=3;
23     //f=1,e=2;
24     int nn=2*n;
25     //bool b=true;//e减  f增
26     int a=1,b=2;
27     cout<<map[1][1];
28     if(n==1)
29         return 0;
30     while(a+b<=n){
31         if(a==1){
32             cout<<" "<<map[a][b];
33             while(b>1){
34                 cout<<" "<<map[++a][--b];
35             }
36             a++;//cout<<" "<<map[][b];
37         }
38         else{
39             if(b==1){
40             cout<<" "<<map[a][b];
41             while(a>1){
42                 cout<<" "<<map[--a][++b];
43             }
44             b++;//cout<<" "<<map[a][];
45             }
46         }
47     }
48     if(a==n){
49         cout<<" "<<map[a][b];
50         while(b<n){
51             cout<<" "<<map[--a][++b];
52         }
53         a++;//cout<<" "<<map[][b];
54     }
55     else{
56         cout<<" "<<map[a][b];
57         while(a<n){
58             cout<<" "<<map[++a][--b];
59         }
60         b++;//cout<<" "<<map[a][b++];
61     }
62     while(a+b<=nn){
63         if(a==n){
64             cout<<" "<<map[a][b];
65             while(b<n){
66                 cout<<" "<<map[--a][++b];
67             }
68             a++;//cout<<" "<<map[][b];
69         }
70         else{
71             if(b==n){
72             cout<<" "<<map[a][b];
73             while(a<n){
74                 cout<<" "<<map[++a][--b];
75             }
76             b++;//cout<<" "<<map[a][b++];
77             }
78         }
79     }
80     cout<<endl;
81     return 0;
82 }

 

posted @ 2015-03-26 12:55  Deribs4  阅读(1014)  评论(0编辑  收藏  举报