試題編號: | 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的正整數
|
#include<iostream>
using namespace std; int main() { int n,flag=1,t=2; cin>>n; int a[n+1][n+1]; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } while(t==2) { cout<<a[1][1]<<" "; t++; } for(t;t<=2*n;t++) { if(flag==1) { for(int i=1;i<t;i++) { if(i<=n&&t-i<=n) cout<<a[i][t-i]<<" "; } flag=0; } else if(flag==0) { for(int i=1;i<t;i++) { if(i<=n&&t-i<=n) cout<<a[t-i][i]<<" "; } flag=1; } } return 0; }
求解思路:本題方法比較簡單,有切問題規模也不是很大,所以相對於來說比較容易。如果能看出來其輸出規則的規律還是很容易求解的。我的思路就是暴力求解,其輸出規則為數組下標之和一次增大,每次輸出一次調換一次方向。有了這個規律之后就是設計程序了。具體設計方法因人而異,上代碼如上。