您的位置:首页 > 编程语言 > C语言/C++

c语言生成zigzag矩阵

2015-09-14 00:00 399 查看
生成的矩阵:

00  01  05  06
02  04  07  12
03  08  11  13
09  10  14  15

#include <stdio.h>

/*
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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: