麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

對一個數組進行zig-zag重新排列

2020-01-26 16:21:16
字體:
來源:轉載
供稿:網友

在看jpeg解碼,里面有對8x8數組進行重排。里面直接提供了unzig表:

int unzig[] = {

0, 1, 8, 16, 9, 2, 3, 10,
17, 24, 32, 25, 18, 11, 4, 5,
12, 19, 26, 33, 40, 48, 41, 34,
27, 20, 13, 6, 7, 14, 21, 28,
35, 42, 49, 56, 57, 50, 43, 36,
29, 22, 15, 23, 30, 37, 44, 51,
58, 59, 52, 45, 38, 31, 39, 46,
53, 60, 61, 54, 47, 55, 62, 63,

};

然后自己寫了個產生unzig表的程序。

:-)

 代碼如下:

復制代碼 代碼如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef void (*fn)(int, int, int, int, void*);

printpos(int x, int y, int n, int i, void *arr)
{
//    printf("%2d%c", x+y*n, i%n==(n-1)?'/n':' ');
    int *a;

    a = (int*)arr;
    printf("%2d%c", a[i], i%n==(n-1)?'/n':' ');
}

unzigasgn(int x, int y, int n, int i, void *arr)
{
    int *a;

    a = (int*)arr;
    a[i] = x+y*n;
}

zigasgn(int x, int y, int n, int i, void *arr)
{
    int *a;

    a = (int*)arr;
    a[x+y*n] = i;
}

zigzag(int n, fn f1, void *arr)
{
    int i, x, y;

    i = 0;
    x = y = 0;
    f1(x, y, n, i, arr);
    for(;;) {
        /* right, or down */
        if(++i >= n*n)
            return;
        if(x+1 < n){
            x++;
            f1(x, y, n, i, arr);
        }else{
            y++;
            f1(x, y, n, i, arr);
        }

        /* left down */
        while(x-1 >= 0 && y+1 < n){
            x--;
            y++;
            if(++i >= n*n)
                return;
            f1(x, y, n, i, arr);
        }

        /* down, or right */
        if(++i >= n*n)
            return;
        if(y+1 < n){
            y++;
            f1(x, y, n, i, arr);
        }else{
            x++;
            f1(x, y, n, i, arr);
        }

        /* right up */
        while(x+1 < n && y-1 >= 0){
            x++;
            y--;
            if(++i >= n*n)
                return;
            f1(x, y, n, i, arr);
        }
    }
}

testzigzag(int n)
{
    int i;
    int n2;
    int *arr;

    n2 = n*n;
    arr = malloc(n*n*sizeof(*arr));

    zigzag(n, (fn)zigasgn, arr);
    zigzag(n, (fn)printpos, arr);
    printf("/n/n");
    zigzag(n, (fn)unzigasgn, arr);
    zigzag(n, (fn)printpos, arr);
}

main(int argc, char **argv)
{
    int n;

    n = 8;
    if(argc > 1){
        n = atoi(argv[1]);
    }
    testzigzag(n);
    return 0;
}

運行結果截圖:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 欧美精品免费一区二区三区 | 欧美精品一级片 | 日本成年网 | 日日摸夜夜骑 | 毛片a区 | 国产精品一区二区三区在线 | 爽爽淫人综合网网站 | 欧美女同hd | 国产精品久久999 | 毛片免费视频网站 | 色播av在线| 国产88久久久国产精品免费二区 | 天天天干夜夜夜操 | 免费在线看黄 | 91在线色| xxxxhd73国产 | 婷婷亚洲一区二区三区 | 一区二区三区日韩精品 | av在线一区二区三区 | sese在线视频| 宅男噜噜噜66一区二区 | 污在线观看网站 | 久久精品久 | 久久精品国产一区二区 | 天天看天天摸天天操 | 国产精品99久久久久久大便 | 国产妞干网 | 精品一区二区三区免费毛片 | 综合网天天色 | 91久久国产露脸精品国产护士 | 91视频久久 | asian超清日本肉体pics | 亚洲一区在线视频观看 | 懂色av懂色aⅴ精彩av | 91九色论坛| 一区二区三区日韩在线 | 色妞视频男女视频 | 久久精品视频亚洲 | 国产精品一区99 | 一级做a爱片毛片免费 | 国产激情视频在线 |