用四叉树表示像素图,然后把两张图像叠加,同时遍历两棵树,计算叠加后总的黑像素个数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node{
int d;
char c;
node* child[4];
};
char a[9999999],b[9999999];
int pos;
int fenj[]={1024,256,64,16,4,1};
node * root1;node *root2;
int count(node* p)
{
int val=0;
if(p->c=='f')
val+=fenj[p->d];
else if(p->c=='p')
{
for(int i=0;i<4;i++)
val+=count(p->child[i]);
}
return val;
}
node* build(node* p,char* str,int d)
{
pos++;
if(pos==strlen(str))
return NULL;
p=new node;
p->c=str[pos];
p->d=d;
for(int i=0;i<4;i++)
p->child[i]=NULL;
if(str[pos]=='p')
{
for(int i=0;i<4;i++)
{
p->child[i]=build(p->child[i],str,d+1);
}
}
return p;
}
int comb(node *p1,node *p2)
{
int val=0;
if(p1->c=='p'&&p2->c=='p')
{
for(int i=0;i<4;i++)
val+=comb(p1->child[i],p2->child[i]);
}
else if(p1->c=='f'||p2->c=='f')
val+=fenj[p1->d];
else if(p1->c=='e'||p2->c=='p')
val+=count(p2);
else if(p1->c=='p'||p2->c=='e')
val+=count(p1);
return val;
}
int main()
{
int i,j,n;
scanf("%d",&n);
while(n--)
{
scanf("%s%s",&a,&b);
pos=-1;
root1=build(root1,a,0);
pos=-1;
root2=build(root2,b,0);
int val=comb(root1,root2);
printf("There are %d black pixels.\n",val);
}
return 0;
}
本文介绍了一种利用四叉树表示像素图的方法,并详细阐述了如何将两张图像进行叠加,同时通过遍历四叉树来计算叠加后的图像中黑色像素的总数。

被折叠的 条评论
为什么被折叠?



