電子書籍の厳選無料作品が豊富!

私は画像の勉強をしています。それで従来の水平スキャンではなく2次元相関をたもったまま1次元配列に変換できるヒルベルトスキャンとBWT変換とエントロピー符号化を用いて圧縮する方法を勉強しています。しかしヒルベルトのほうができなくて困っています。
プログラムの実行結果でヒルベルト曲線通る座標を示すプログラムを教えてください。だいたいは書けましたがうまくいきません。プログラムは
#include<stdio.h>
int x,y;
main() {
int n;
void RUL(int n),DLU(int n),LDR(int n),URD(int,n);
scanf("%d",&n);
printf("#位相%dのヒルベルト曲線\n",n);
x=0; y=0;printf("%d\n",x,y);
RUL(n);printf("\n");
}
void RUL(int n) {
if(n<=0) {return;}
URD(n-1);x=x+1;printf("%d %d\n",x,y);
RUL(n-1);y=y+1;printf("%d %d\n",x,y);
RUL(n-1);x=x-1;printf("%d %d\n",x,y);
DLU(n-1);
}
void DLU(int n) {
if(n<=0) {return;}
LDR(n-1);y=y-1;printf("%d %d\n",x,y);
DLU(n-1);x=x-1;printf("%d %d\n",x,y);
DLU(n-1);y=y+1;printf("%d %d\n",x,y);
RUL(n-1);
}
void LDR(int n) {
if(n<=0) {return;}
DLU(n-1);x=x-1;printf("%d %d\n",x,y);
LDR(n-1);y=y-1;printf("%d %d\n",x,y);
LDR(n-1);x=x+1;printf("%d %d\n",x,y);
URD(n-1);
}
void URD(int n) {
if(n<=0) {return;}
RUL(n-1);y=y+1;printf("%d %d\n",x,y);
URD(n-1);x=x+1;printf("%d %d\n",x,y);
URD(n-1);y=y-1;printf("%d %d\n",x,y);
LDR(n-1);
}
です。それをBWT変換とエントロピー符号にかけ圧縮させその圧縮率を求めその後画像はちゃんと戻るかを調べるために復元のプログラムを書かないいけませんがそのプログラムがわかりません。教えてください。

A 回答 (2件)

#1補足<


このプログラム自体をよく理解していないので
プログラムの動作について自信をもって言えないのですが、
深さ(n)で再帰的に処理するんですよね。
それぞれで、x,yを保持していないといけないのではなどと思ってしまいました。
とりあえず、windowsでは、期待したように今のプログラムは(座標を表示する部分)正しく動作するんですね。?

この回答への補足

返事遅くなってすみません。windowsだとうごきます。

補足日時:2004/10/20 21:59
    • good
    • 0

これって、x,yが大域変数でうまくいくんですか?

この回答への補足

大域変数を何したらいいでしょうか?このx、yは座標の位置をあらわしています。LinuxでやるとRUL、URDなどの宣言を受け付けてくれません。

補足日時:2004/10/19 12:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!