请教如何用zigzag方式扫描一个N*N数组
网上多是生成zigzag数组,没找到扫描方法,哪位大哥给点提示呗,C或C++吧,不胜感激
[解决办法]
仅供参考:
//n=1,
//1
//n=2,
//12
//34
//n=3,
//126
//357
//489
//n=4,
// 1 2 6 7
// 3 5 8 13
// 4 9 12 14
// 10 11 15 16
//n=5,
// 1 2 6 7 15
// 3 5 8 14 16
// 4 9 13 17 22
// 10 12 18 21 23
// 11 19 20 24 25
//之字形
//模仿蚂蚁爬的过程
#include <stdio.h>
#define MAXN 9
int m[MAXN][MAXN];
int i,x,y,dx,dy,n,n2,k;
void main() {
for (i=1;i<=MAXN;i++) {
n2=i*i;
k=1;
if (n2>9) k=3;
x=0;
y=0;
dx=1;
dy=-1;
n=1;
m[y][x]=n;
while (1) {
if (n>=n2) break;
n++;
x=x+dx;
y=y+dy;
if (y>=i) {
x=x+2;
y=i-1;
dx=1;
dy=-1;
}
if (x>=i) {
y=y+2;
x=i-1;
dx=-1;
dy=1;
}
if (y<0) {
y=0;
dx=-1;
dy=1;
}
if (x<0) {
x=0;
dx=1;
dy=-1;
}
m[y][x]=n;
}
for (y=0;y<i;y++) {
for (x=0;x<i;x++) {
printf("%*d",k,m[y][x]);
}
printf("\n");
}
printf("-------------%d--------------\n",i);
}
}
//1
//-------------1--------------
//12
//34
//-------------2--------------
//126
//357
//489
//-------------3--------------
// 1 2 6 7
// 3 5 8 13
// 4 9 12 14
// 10 11 15 16
//-------------4--------------
// 1 2 6 7 15
// 3 5 8 14 16
// 4 9 13 17 22
// 10 12 18 21 23
// 11 19 20 24 25
//-------------5--------------
// 1 2 6 7 15 16
// 3 5 8 14 17 26
// 4 9 13 18 25 27
// 10 12 19 24 28 33
// 11 20 23 29 32 34
// 21 22 30 31 35 36
//-------------6--------------
// 1 2 6 7 15 16 28
// 3 5 8 14 17 27 29
// 4 9 13 18 26 30 39
// 10 12 19 25 31 38 40
// 11 20 24 32 37 41 46
// 21 23 33 36 42 45 47
// 22 34 35 43 44 48 49
//-------------7--------------
// 1 2 6 7 15 16 28 29
// 3 5 8 14 17 27 30 43
// 4 9 13 18 26 31 42 44
// 10 12 19 25 32 41 45 54
// 11 20 24 33 40 46 53 55
// 21 23 34 39 47 52 56 61
// 22 35 38 48 51 57 60 62
// 36 37 49 50 58 59 63 64
//-------------8--------------
// 1 2 6 7 15 16 28 29 45
// 3 5 8 14 17 27 30 44 46
// 4 9 13 18 26 31 43 47 60
// 10 12 19 25 32 42 48 59 61
// 11 20 24 33 41 49 58 62 71
// 21 23 34 40 50 57 63 70 72
// 22 35 39 51 56 64 69 73 78
// 36 38 52 55 65 68 74 77 79
// 37 53 54 66 67 75 76 80 81
//-------------9--------------