UVA - 297 Quadtrees

来源:互联网 发布:股权众筹系统源码 编辑:程序博客网 时间:2024/06/01 07:54

题目大意:四叉树,给 32 × 32 的格子涂色,p 表示将当前格子分为四个象限,根据 1、2、3、4 象限的顺序处理,e 不上色,f 将当前格子涂黑,问两个图重叠后涂黑的格子数是多少。

解题思路:递归,二维数组模拟格子涂色,两轮后计算黑色格子数。

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<ctype.h>using namespace std;int map[35][35];void draw(int r, int c, int a) {    char ch;    ch = getchar();    if (ch != '\n') {        if (ch == 'p') {            draw(r, c+a/2, a/2);            draw(r, c, a/2);            draw(r+a/2, c, a/2);            draw(r+a/2, c+a/2, a/2);        }        else if (ch == 'f') {            for (int i = r; i < r+a; i++)                for (int j = c; j < c+a; j++)                     map[i][j] = 1;        }    }}int main() {    int N;    scanf("%d", &N);    while (N--) {        memset(map, 0, sizeof(map));        getchar();        draw(0, 0, 32);        getchar();        draw(0, 0, 32);         int cnt = 0;        for (int i = 0; i < 32; i++)            for (int j = 0; j < 32; j++)                if (map[i][j] == 1)                    cnt++;        printf("There are %d black pixels.\n", cnt);        }   return 0;}
0 0