CCF 201412-2Z字形掃描【暴力】
阿新 • • 發佈:2018-12-10
試題編號: | 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 a[505][505]; int main() { int n; cin>>n; int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>a[i][j]; } } int s=3;//陣列下標之和 int t=0;//用來調換方向 cout<<a[1][1]<<" "; for(s=3;s<=2*n;s++) { if(t==0) { for(i=1;i<s;i++) { if(i<=n&&s-i<=n) { cout<<a[i][s-i]<<" "; } } t=1; } else if(t==1) { for(i=1;i<s;i++) { if(i<=n&&s-i<=n) { cout<<a[s-i][i]<<" "; } } t=0; } } return 0; }