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 }