程序员面试宝典--8.3循环和数组 zigzag编码

来源:互联网 发布:原画梦的网络课很烂 编辑:程序博客网 时间:2024/05/21 19:44

这里写图片描述

之字形编码;

思路:设置flag标志走向!注意转折点的处理

/*zigzag数组是一个“之”字形排列的数组,如8*8的zigzag数组:      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<vector>using namespace std;int main(){    int n=0;    cin>>n;    vector<vector<int>> vec;    vector<int> vec1;    for(int j=0;j<n;j++)    {        for(int i=0;i<n;i++)            vec1.push_back(0);        vec.push_back(vec1);    }    int i=0,j=0;    int flag=0;    vec[0][0]=0;    int count=1;    //cout<<(n*n)<<endl;    while(count<(n*n))    {        if(flag==0)        {            if(i==0&&j!=n-1)            {                vec[i][++j]=count;                flag=1;            }            else if(i!=n-1&&j==n-1)            {                vec[++i][j]=count;                flag=1;            }            else if(i!=n-1&&j==0)            {                vec[++i][j]=count;                flag=-1;            }            else if(i==n-1&&j!=n-1)            {                vec[i][++j]=count;                flag=-1;            }        }        else if(flag==1)        {            vec[++i][--j]=count;            if(j==0||i==n-1)                flag=0;        }        else if(flag==-1)        {            vec[--i][++j]=count;            if(i==0||j==n-1)                flag=0;        }        count++;    }    for(int i=0;i<n;i++){        for(int j=0;j<n;j++)            printf("%6d ",vec[i][j]);        cout<<endl;    }    return 0;}
0 0