生成的矩阵:
00 01 05 06
02 04 07 12
03 08 11 13
09 10 14 15
#include
/*
0, 1, 5, 6,
2, 4, 7,12,
3, 8, 11,13,
9, 10, 14, 15.
*/
int vect[4][4] = {0};
void next(int vect[][4], int *i , int *j ,bool flag){
int tmp = vect[*i][*j] +1;
if(flag){
*i = *i + 1 ;//down
*j = *j - 1 ;
//printf("down i = %d\n", *i);
vect[*i][*j] = tmp ;
//printf("down vect[%d][%d] = %d\n", *i,*j ,vect[*i][*j]);
}
else{
*i = *i - 1 ;//up
*j = *j + 1 ;
//printf("up i = %d\n", *i);
vect[*i][*j] = tmp ;
//printf("up vect[%d][%d] = %d\n", *i, *j ,vect[*i][*j]);
}
};
void print(){
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
//printf("vect[%d][%d] = %d ", i,j ,vect[i][j]);
printf("%02d ", vect[i][j]);
}
printf("\n");
}
}
int main(int argc, char const *argv[])
{
const int N = 4 ;
int j = 0 , i = 0;
int count = 2;
int total = 2 * N ;
int line = 1 ;
bool down = false ; //up
bool change = false ;
while(line < total ) {
if(down){
int tmp = vect[i][j] ;
if(change){
j ++ ;
}else{
i ++ ;
}
vect[i][j] = tmp+1 ;
down = false ;
}else{ //up
int tmp = vect[i][j] ;
if(change){
i++ ;
}else{
i = 0 ;
j++;
}
vect[i][j] = tmp+1 ;
down = true ;
}
//printf("count = %d\n", count);// 2
//printf("out of while : vect[%d][%d] = %d\n", i,j ,vect[i][j]);
int curr = 0 ;
while(curr < count -1 ){
//printf("now j =%d , i= %d \n" , j , i) ;
//printf("vect= %d \n" , vect[i][j]) ;
//printf("down flag is %d\n", down );
next(vect , &i , &j, down) ;
curr++ ;
//printf("\n");
}
line ++ ;
if(change){
count -- ;
}else{
count ++ ;
if(count > N ) {
change = true ;
count = count -2 ;
}
}
}
print() ;
return 0 ;
}