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 }