对于矩阵遍历规则如下:
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–;
遍历如下:
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 |
#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;
}