题目:Quadtrees
题意:用一颗四叉树表示一张图,给出两颗四叉树的dfs遍历,求吧这两张图和在一起后黑色像素的个数。
思路:dfs将四叉树转化成原始的图片。
代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
bool a[33][33]= {0};
int cnt;
void dfs(string x,int row1,int col1,int row2,int col2) {
cnt++;
int k=cnt;
if(x[k]=='p') {
dfs(x,row1,(col1+col2)/2+1,(row1+row2)/2,col2);
dfs(x,row1,col1,(row1+row2)/2,(col1+col2)/2);
dfs(x,(row1+row2)/2+1,col1,row2,(col1+col2)/2);
dfs(x,(row1+row2)/2+1,(col1+col2)/2+1,row2,col2);
}
if(x[k]=='f'){
for(int i=row1;i<=row2;i++){
for(int j=col1;j<=col2;j++){
a[i][j]=true;
}
}
}
}
void print(){
int sum=0;
for(int i=1;i<=32;i++){
for(int j=1;j<=32;j++){
if(a[i][j]) sum++;
}
}
printf("There are %d black pixels.\n",sum);
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
memset(a,0,sizeof(a));
string x,y;
cin>>x>>y;
cnt=-1;
dfs(x,1,1,32,32);
cnt=-1;
dfs(y,1,1,32,32);
print();
}
return 0;
}