请教如何用zigzag方式扫描一个N*N数组

winters_teng 2012-12-06 07:47:03
网上多是生成zigzag数组,没找到扫描方法,哪位大哥给点提示呗,C或C++吧,不胜感激
...全文
290 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-12-13
  • 打赏
  • 举报
回复
“仅供参考”这四个字的意思“只可意会,不可言传。”
赵4老师 2012-12-07
  • 打赏
  • 举报
回复
仅供参考:
//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--------------
winters_teng 2012-12-07
  • 打赏
  • 举报
回复
哦,意思是用你生成的数组取扫描?
winters_teng 2012-12-07
  • 打赏
  • 举报
回复
[quote=引用 1 楼 zhao4zhong1 的回复:] 仅供参考:/quote] 我的意思是给定一个矩阵,zigzag扫描后得到一个数组或新矩阵,您的方法好像也是生成zigzag矩阵吧,或者我没看明白?

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧