之字形编码;
思路:设置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;
}