您的位置:首页 > 其它

UVa 297 (四分树 递归) Quadtrees

2014-09-22 18:01 489 查看
题意:

有一个32×32像素的黑白图片,用四分树来表示。树的四个节点从左到右分别对应右上、左上、左下、右下的四个小正方区域。然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的,e(empty)代表该节点是白色的,p表示灰色节点,即它还有子节点。

每组数据给出两幅图,求两幅图黑色像素合并以后的黑色像素的个数。

分析:

字符串是递归给出的,那么就递归地处理。遇到字符'p'就递归进去,遇到黑色色的就统计。

递归函数的参数有个是引用,标记读到字符串是哪一位了,简化了程序。

#include <cstdio>
#include <cstring>

const int len = 32;
const int maxn = 1024 + 10;
char s[maxn];
int buf[len][len], cnt;

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);
draw(s, p, r, c, w/2);
draw(s, p, r+w/2, c, w/2);
draw(s, p, r+w/2, c+w/2, w/2);
}
else if(ch == 'f')
{
int i, j;
for(i = r; i < r+w; ++i)
for(j = c; j < c+w; ++j)
if(buf[i][j] == 0)
{
buf[i][j] = 1;
cnt++;
}
}
}

int main(void)
{
//freopen("in.txt", "r", stdin);

int T;
scanf("%d", &T);
while(T--)
{
memset(buf, 0, sizeof(0));
cnt = 0;
int i;
for(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;
}


代码君
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: