Z字形编排问题详解(C++)

Z字形编排问题详解(C++):

问题描述:给定一个矩阵matrix,输出矩阵matrix进行Z字形编排后的内容。

原矩阵

                  

输出形式:

             

算法分析与详细解答:

      要解决这样一个问题,可能一开始无从下手,但是我们只要认真观察Z字形矩阵的走向过程,就不难发现其中的规律。对于原始矩阵matrix中的任意元素 matrix[i][j]的遍历走向规律可以分为以下三种情况:

       1、如果矩阵的元素matrix[i][j]中纵坐标j是偶数,并且i==0或i==SIZE-1,那么遍历路径在矩阵中的走向就是向右移动一格。

       2、如果矩阵的元素matrix[i][j]中横坐标i是奇数,并且j==0或j==SIZE-1,那么遍历路径在矩阵中的走向就是向下移动一格。

       3、除以上规律情况之外,如果矩阵的元素matrix[i][j]的横纵坐标之和i+j为偶数,那么遍历路径在矩阵中的走向就是向右

            上角移动一格;否则,如果i+j是奇数,那么遍历路径在矩阵中的走向就是向左下角移动一格。

c++代码:

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 const int SIZE = 8;
 5 int main()
 6 {
 7     int matrix[SIZE][SIZE]= { 0 };
 8     int a[SIZE][SIZE] = { 0 };
 9     int* ptr = &(matrix[0][0]);
10     for (int i = 0; i < SIZE*SIZE; i++) 
11         *ptr++ = i;
12     cout << "原始矩阵如下:" << endl;
13     for (int i = 0; i < SIZE; i++) 
14     {
15         for (int j = 0; j < SIZE; j++) 
16             cout << setw(4) << *(*(matrix + i) + j);
17         cout << endl;
18     }
19 //进行Z-字形编排
20     int i = 0, j = 0;
21     for (int x = 0; x < SIZE; x++)
22     {
23         for (int y = 0; y < SIZE; y++) {
24             *(*(a + i) + j) = *(*(matrix + x) + y);
25             if ((i == 0 || i == SIZE - 1) && j % 2 == 0)
26             {
27                 j++;
28                 continue;
29             }
30             if ((j == 0 || j == SIZE - 1) && i % 2 == 1)
31             {
32                 i++;
33                 continue;
34             }
35             if ((i + j) % 2 == 0) {
36                 i--;
37                 j++;
38             }
39             else if ((i + j) % 2 == 1) {
40                 i++;
41                 j--;
42             }
43         }
44     }
45     cout << "编排矩阵如下:" << endl;
46     for (int k = 0; k < SIZE; k++)
47     {
48         for (int  h= 0; h < SIZE; h++)
49             cout << setw(4) << *(*(a + k) + h);
50         cout << endl;
51     }
52     system("pause");
53     return 0;
54 }

欢迎评论!

 

              

 

posted on 2019-03-11 23:29  new一个世界  阅读(1484)  评论(0编辑  收藏  举报

导航