程序員面試寶典--8.3循環和數組 zigzag編碼

這裏寫圖片描述

之字形編碼;

思路:設置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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章