一道4叉树的题,两个32X32的图片(32X32的二维数组)叠加,统计所得到图中的黑像素点(数组对应值为1)的个数
输入是 一个先序序列,利用递归来“建立”树(此处并不是真正意义上的建立一个数据结构,而是根据4叉树结构特点去解析序列,获得我们需要的解题条件)
递归处理细节见代码
#include<string>
#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
#define WIDTH 32
#define MAX 40
int image[MAX][MAX];
int ans = 0;
void Solve(const string &str, int &cur, int r, int c, int w)
{
char temp = str[cur++];
if (temp == 'p')
{
Solve(str, cur, r, c + w / 2, w / 2); //1
Solve(str, cur, r, c, w / 2); //2
Solve(str, cur, r + w / 2, c, w / 2); //3
Solve(str, cur, r + w / 2, c + w / 2, w / 2);//4
}
else if (temp == 'f')
{
for (int i = r;i != r + w;++i)
{
for (int j = c;j != c + w;++j)
{
if (image[i][j] == 0)
{
image[i][j] = 1;
++ans;
}
}
}
}
}
int main()
{
int n;
cin >> n;
while (n--)
{
memset(image, 0, sizeof(image));
string str;
for (int i = 0;i != 2;++i)
{
int cur = 0;
cin >> str;
Solve(str, cur, 0, 0, WIDTH);
}
printf("There are %d black pixels.\n", ans);
ans = 0;
}
return 0;
}
变量r,c ,w分别是当前递归层次所处理的“图像”的左上角横、纵坐标和“图像"宽度
所谓图像只不过就是二维数组的某个子数组,仔细揣摩下原题中那张图就能明白