對(duì)一個(gè)數(shù)組進(jìn)行zig-zag重新排列
在看jpeg解碼,里面有對(duì)8x8數(shù)組進(jìn)行重排。里面直接提供了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,
};
然后自己寫了個(gè)產(chǎn)生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;
}
運(yùn)行結(jié)果截圖:
相關(guān)文章
Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼
在當(dāng)今計(jì)算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個(gè)完整的示例代碼,需要的朋友可以參考下2024-01-01實(shí)現(xiàn)一個(gè)random?shuffle算法示例
這篇文章主要為大家介紹了實(shí)現(xiàn)一個(gè)random?shuffle算法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合
這篇文章主要為大家詳細(xì)介紹了opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03C語(yǔ)言動(dòng)態(tài)內(nèi)存規(guī)劃詳解
這篇文章主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存的規(guī)劃,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-10-10詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制
這篇文章主要介紹了詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下2021-02-02