按一定的角度Z字形遍历一个矩阵

这段程序也是来源于工程,工程中需要我从矩阵的右上角开始,按指定的角度斜线遍历一个矩阵(也就是Z字形遍历),就像下图那样。

《按一定的角度Z字形遍历一个矩阵》

比如这样一个矩阵


0     1     2     3
4     5     6     7
8     9     10    11
12    13    14     15


按45度遍历输出的顺序就是:
3 2 7 1 6 11 0 5 10 15 4 9 14 8 13 12

#include <iostream>

using namespace std;

void main( void )
{
     int m,n,p,i,j;
     cout<<"m=";
     cin>>m;
     cout<<"n=";
     cin>>n;

     int *matrix = new int[m*n];

     //初始化测试数组
     for( i = 0 ; i < m*n; i++ )
     {
          matrix[i] = i;
     }

     float angle = 45.0;//以45度遍历
     float tanAngle = tanf(angle /180.0*3.1415926);

     for( p = n - 1; p >= -1*(m - 1); p-- )
     {
          for( i = 0; i <= ( n - 1- p ); i++ )
          {
               j = p + (int)( i*tanAngle + 0.5 );
               if( i < m && j <n  && j >= 0)
               {
                    cout<<*(int*)( matrix + i*n + j )<<" ";
               }
          }
          cout<<endl;
     }

     delete []matrix;
}


当angle不是45度时,可能因为计算j的时候,求tan再取整的原因,出现边缘的一些点没有遍历到。这是个BUG,还请有兴趣的朋友们一起寻找解决之道。(因为我的工程里一个大矩阵中少数几个点没有遍历到无关紧要,所以我就没有再深入地思考。)

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