Uva 297 四分樹
阿新 • • 發佈:2017-07-19
每次 區域 我們 con 鍛煉 註意 順序 == 大小
題意:
有一個大小為32*32的圖像, 它可以描述為一顆四分樹, 如下圖
註意描述順序為
2 1
3 4
給出兩棵四分樹的先序遍歷, 求兩者合並後, 黑色像素的個數。
分析:
因為本題給的樹是一顆完全的樹, 所以只需要給出先序遍歷, 就能確定整棵樹。
我們可以建一個32*32的數組模擬塗色的過程, 是一個鍛煉遞歸的好題目, 遞歸的代碼通常也可以寫的很簡便。
每次確定一個左上角坐標(r,c), 和長度len,就可以把一個矩形區域填充。
最後數一下填充多少個即可。
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5;const int len = 32; int buf[len][len], cnt; char s[maxn]; // 2 1 // 3 4 int draw(int& p, int r, int c,int len){ char ch = s[p++]; if(ch == ‘p‘){ draw(p,r,c+len/2, len/2); draw(p,r,c , len/2); draw(p,r+len/2,c, len/2); draw(p,r+len/2,c+len/2, len/2); }else if(ch == ‘f‘){ for(int i = r; i < r+len; i++){ for(int j = c; j < c +len; 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(p , 0 , 0, len); } printf("There are %d black pixels.\n",cnt); } }
Uva 297 四分樹