生活随笔
收集整理的這篇文章主要介紹了
CCF Z字形扫描
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Z字形掃描
問題描述 在圖像編碼的算法中,需要將一個給定的方形矩陣進行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 #include <iostream>
2 #include <cstring>
3 using namespace std;
4 const int maxn =
600;
5 int d[maxn][maxn],n;
6 const int dir[
2][
2] = {-
1,
1,
1,-
1};
7 bool isIn(
int x,
int y) {
8 return x >=
0 && x < n && y >=
0 && y <
n;
9 }
10 int main() {
11 while(~scanf(
"%d",&
n)) {
12 for(
int i =
0; i < n; ++
i)
13 for(
int j =
0; j < n; ++
j)
14 scanf(
"%d",d[i]+
j);
15 int m = n + n -
1;
16 bool flag =
true,o =
false;
17 for(
int i =
0; i < m; ++i,flag = !
flag) {
18 for(
int j = flag?
0:i; flag?(j <= i):(j >=
0); flag?++j:--
j) {
19 if(isIn(i-
j,j)) {
20 if(o) putchar(
' ');
21 printf(
"%d",d[i-
j][j]);
22 o =
true;
23 }
24 }
25 }
26 putchar(
'\n');
27 }
28 return 0;
29 }
View Code ?
轉載于:https://www.cnblogs.com/crackpotisback/p/4354569.html
總結
以上是生活随笔為你收集整理的CCF Z字形扫描的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。