日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(DFS)四分树

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (DFS)四分树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

如圖6-8所示,可以用四分樹來表示一個黑白圖像,方法是用根結點表示整幅圖像,然后把行列個分城兩等分,按照圖中的方式編號,從左到右對應4個子結點。如果某子結點對應的取余全白或全黑,則直接用一個黑結點或者白結點表示:如果即有黑又有白,則用一個灰結點表示,并且為這個區域遞歸建樹。

給出兩棵四分樹的先序遍歷,求二者合并之后(黑色部分合并)黑色像素的個數。p表示中間結點,f表示黑色(full),e表示白色(empty)。

每個圖的大小都為32*32,輸出黑色塊的個數。

分析與解答:

1.輸入字符串,然后調用函數
2.函數中,遇見p就模擬建樹,這個題用到了利用坐標的技巧來分割區域,
行 Row
列 Column

3.注意你遍歷涂色時候,是根據黑色坐標的范圍來對大矩陣賦值的,所以他每次調用傳遞坐標,傳遞w。

#include<cstdio> #include<cstring>const int len = 32; const int maxn = 1024 + 10; char s[maxn]; int buf[len][len], cnt;// 把字符串s[p..]導出到以(r,c)為左上角,邊長為w的緩沖區中 // 2 1 // 3 4 void draw(const char* s, int& p, int r, int c, int w) {char ch = s[p++];if(ch == 'p') {draw(s, p, r, c+w/2, w/2); // 1draw(s, p, r, c , w/2); // 2draw(s, p, r+w/2, c , w/2); // 3draw(s, p, r+w/2, c+w/2, w/2); // 4} else if(ch == 'f') { // 畫黑像素(白像素不畫)for(int i = r; i < r+w; i++)for(int j = c; j < c+w; j++)if(buf[i][j] == 0) { buf[i][j] = 1; cnt++; }} }int main() {int T;scanf("%d", &T);while(T--) {memset(buf, 0, sizeof(buf));cnt = 0;for(int i = 0; i < 2; i++) {scanf("%s", s);int p = 0;draw(s, p, 0, 0, len);}printf("There are %d black pixels.\n", cnt);}return 0; }

總結

以上是生活随笔為你收集整理的(DFS)四分树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。