Z字形遍历矩阵

对于矩阵遍历规则如下:

1、如果矩阵中的纵坐标j是偶数,且i=0或者i=7,那么遍历路径在矩阵中走向就是向右移动一格

2、如果矩阵中的横坐标i是奇数,且j=0或者j=7,那么遍历路径在矩阵中走向就是向下移动一格

3、除上述情况外,如果矩阵matrix[i][j]中的横纵坐标之和i+j是偶数,则遍历路径在矩阵中走向是右上角移动一格  //i–;j++;

                                  如果矩阵matrix[i][j]中的横纵坐标之和i+j是奇数,则遍历路径在矩阵中走向是左下角移动一格  //i++;j–;

遍历如下:

015614152728
2471316262942
38121725304143
911182431404453
1019233239455254
2022333846515560
2134374750565961
3536484957586263

#include<iostream>

#include <iomanip>

#define SIZE 8

using namespace std;

int main1(int argc, char** argv){

int matrix[SIZE][SIZE] = { 0 };

int a[SIZE][SIZE] = { 0 };

int value = 0;

int *p;

p = &matrix[0][0];

for (int i = 0; i < SIZE*SIZE; i++)

{

*p++ = i;

}

cout << “原始矩阵如下:” << endl;

for (int i = 0; i < SIZE; i++)

{

for (int j = 0; j < SIZE; j++)

{

cout << setw(4) << *(*(matrix + i) + j);

}

cout << endl;

}

int x, y;

x= y= 0;

//for (int i = 0; i< SIZE; i++)

//{

for (int j = 0; j< SIZE*SIZE; j++)

{

// *(*(a + x) +y) = *(*(matrix + x) +y);

*(*(a + x) + y) = value++;

if ((x == SIZE-1 || x==0) && y%2==0)

{

y++;

continue;

}

if ((y==SIZE-1 || y==0) && x%2==1)

{

x++;

continue;

}

if ((x+y)%2==0)

{

x–;

y++;

}

if ((x+y)%2==1)

{

x++;

y–;

}

}

//}

cout << “经过Z字形编排之后的矩阵如下:” << endl;

for (int i = 0; i < SIZE; i++)

{

for (int j = 0; j < SIZE; j++)

{

cout << setw(4) << *(*(a + i) + j);

}

cout << endl;

}

return 0;

}

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/liuzhuannianshao/article/details/70653130
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞