目前我正在嘗試使用C語言實作不同的功能來實作對四叉樹的操作。
語境:
四叉樹(黑白圖)是:
- 白色的
- 黑色的
- 分為4個子影像:左上角、右上角、左下角、右下角
圖片由下一個結構表示:
typedef struct block_image
{
int allBlack; //boolean
struct block_image * son[4];
}block_image;
typedef block_image *image;
如果指標 == NULL,則圖片為白色
如果指標指向 allBlack == true 的結構,則圖片為黑色,并且son[0]、son['1']、son[2] 和son[3] 為NULL。
如果指標指向一個結構體,其中allBlack == false,則圖片由4張圖片分解得到,son[0]、son['1']、son[2]和son[3]在頂部-左、右上、左下和右下。
有了這些資訊,就可以實作三個功能來創建影像:
Build_white(): 構建白色圖片:
image Build_white()
{
image newImage = NULL;
return newImage;
}
Build_black(): 構建黑色圖片:
image Build_black()
{
image newImage = malloc(sizeof(block_image));
newImage->allBlack = 1;
newImage->son[0] = NULL;
newImage->son[1] = NULL;
newImage->son[2] = NULL;
newImage->son[3] = NULL;
return newImage;
}
Build_composed(image topL, image topR, image bottomL, image bottomR): 構建合成圖片:
image Build_composed(image topL, image topR, image bottomL, image bottomR)
{
image newImage = malloc(sizeof(block_image));
newImage->allBlack = 0;
newImage->son[0] = topL;
newImage->son[1] = topR;
newImage->son[2] = bottomL;
newImage->son[3] = bottomR;
return newImage;
}
問題:
但是之后需要實作一個可以列印圖片的功能,例如白色圖片用“W”表示,黑色圖片用“B”表示,合成圖片用 img1img2img3img4表示,例如 WBBW。
因此,目前,我正在嘗試對此函式進行編碼,并通過列印黑色或白色圖片(未組合)。
我目前的功能:
void normalDisplay(image myPicture)
{
if(myPicture == NULL)
{
printf("W");
}
else if(myPicture->allBlack == 1 && myPicture->son[0] == NULL && myPicture->son[1] == NULL && myPicture->son[2] == NULL && myPicture->son[3] == NULL)
{
printf("N");
}
}
在 main(): Image white1 = Build_white();
影像 black1 = Build_black();
如果我做 normalDisplay(white1); 我在終端上得到“W”,如果我做 normalDisplay(black1); 我在終端上收到“B”。
否則,我不知道如何列印組合函式,如何管理我的函式的不同可能性以列印更復雜的圖片。
比如這張圖(課程示例):

可以這樣編碼:
image composed = Build_composed(
Build_black(),
Build_white(),
Build_white(),
Build_composed(
Build_black(),
Build_white(),
Build_composed(
Build_white(),
Build_black(),
Build_lack(),
Build_white()
),
Build_black()
)
);
并且應該顯示為: BWW BW WBBWB 使用 normalDisplay 功能。
因此,任何人都可以通過解釋如何修改我的函式來幫助我理解如何使用后綴表示法顯示合成影像,以便它可以考慮最多的情況?
uj5u.com熱心網友回復:
我如何通過解釋如何修改我的函式來顯示帶有后綴符號的合成影像,以便它可以考慮最多的情況?
這真是微不足道。只需為這個單元格顯示它或為孩子們顯示它。
typedef struct block_image image;
void normalDisplay(image *t) {
if (t == NULL) {
printf("W");
} else if (t->allBlack) {
printf("B");
} else {
printf(" ");
normalDisplay(t->son[0]); // upper left
normalDisplay(t->son[1]); // upper right
normalDisplay(t->son[2]); // lower left
normalDisplay(t->son[3]); // lower right
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400306.html
上一篇:餐飲野蠻人問題-信號量和互斥量
