經典Z字形編排問題的詳細解讀

2021-08-16 07:53:12 字數 1873 閱讀 5886

正常8x8矩陣:

0    1    2    3   4     5    6    7

8    9  10  11  12  13  14  15

16  17  18  19  20  21  22  23

24  25  26  27  28  29  30  31

32  33  34  35  36  37  38  39

40  41  42  43  44  45  46  47

48  49  50  51  52  53  54  55

56  57  58  59  60  61  62  63

z字形排序8x8矩陣:

0    1    5    6  14  15  27  28

2    4    7  13  16  26  29  42

3    8  12  17  25  30  41  43

9  11  18  24  31  40  44  53

10  19  23  32  39  45  52  54

20  22  33  38  46  51  55  60

21  34  37  47  50  56  59  61

35  36  48  49  57  58  62  63

通過對原始矩陣的分析可得出如下三種規律:

1.如果二維陣列中的元素中縱座標是偶數,且橫座標是0或size-1,那麼遍歷路徑在矩陣中的走向是水平向右移動一格;

2.如果二維陣列中的元素中橫座標是偶數,且縱座標是0或size-1,那麼遍歷路徑在矩陣中的走向是垂直向下移動一格;

3.除以上外,如果橫縱座標之和是偶數,則遍歷路徑向右上角移動一格,如果是奇數,則遍歷路徑向左下角移動一格;

c++**如下:

#include #include using namespace std;

#define size 8

int main()

; int dst[size][size] = ;

int i, j, x, y, values = 0;

//初始化矩陣並列印

for(i = 0,values = 0; i

cout<

} //z字形排序

for(x = 0, i = 0, j = 0; x < size; x++)

//2.如果二維陣列中的元素中橫座標是偶數,且縱座標是0或size-1,那麼遍歷路徑在矩陣中的走向是垂直向下移動一格;

if((j == 0 || j == size-1) && i%2!=0)

//3.如果橫縱座標之和是偶數,則遍歷路徑向右上角移動一格;

if((i+j)%2 == 0)

//4.如果是奇數,則遍歷路徑向左下角移動一格;

else if((i+j)%2 == 1)

}} //列印目標矩陣

for(i = 0; i

cout<

} return 0;

}

Z字形考場編排演算法

在大型考試中學生的座號一般按6 5 z字形編排。如下圖 1 12 13 24 25 2 11 14 23 26 3 10 15 22 27 4 9 16 21 28 5 8 17 20 29 6 7 18 19 30 使用程式如何實現呢?看似毫無頭緒,怎麼辦呢?先看看這樣的排列如何實現 1 7 13...

Z字形編排問題(Zigzag)的一種更簡單的實現

z字形編排問題主要應用在jpeg編碼上,也叫zigzag。主要思路就是從左上角第乙個畫素開始以z字形進行編排。最後得到如下圖的矩陣 在左飛的 演算法之美 隱匿在資料結構背後的原理 中有對z字形編碼的演算法實現。其實現比較複雜,主要思路是定義了兩個二維陣列 乙個二維陣列用來存正常的順序,乙個二維陣列用...

陣列相關 4 4陣列轉置 z字形編排

4 4陣列轉置 includeusing namespace std int main int argc,char argv int i 0 int j 0 int tmp 0 for i 0 i 4 i j i 1 for i 0 i 4 i int i 0 int j 0 const int t...