紫书原题,UVA297
利用四叉树处理图片,给你两张黑白图片的四叉树,问两张图片叠加后黑色的面积
给出两颗四分树的先序遍历,求合并之后黑色像素的个数,p表示斑马结点,f表示黑色,e表示白色
四分树是一个神奇的树,只需要给出先序遍历就可以确定整棵树
四分树也可以用来实现二维线段树,只不过太恶心啦
1 #include<cstdio> 2 #include<cstring> 3 const int len=32; 4 const int maxn=1024+10; 5 char s[maxn]; 6 int cnt; 7 int buf[len][len]; 8 //把字符串s导出到以r,c为左上角,边长为w的缓冲区中 9 //2 1 10 //3 4 11 void draw(const char* s,int &p,int r,int c,int w) 12 { 13 char ch=s[p++]; 14 if(ch=='p') 15 { 16 draw(s,p,r,c+w/2,w/2); //1 17 draw(s,p,r,c,w/2); //2 18 draw(s,p,r+w/2,c,w/2); //3 19 draw(s,p,r+w/2,c+w/2,w/2); //4 20 } 21 else if(ch=='f') //画黑像素 22 { 23 for(int i=r;i<r+w;i++) 24 for(int j=c;j<c+w;j++) 25 if(buf[i][j]==0) 26 { 27 buf[i][j]=1;cnt++; 28 } 29 } 30 } 31 int main() 32 { 33 int T; 34 scanf("%d",&T); 35 while(T--) 36 { 37 memset(buf,0,sizeof(buf)); 38 cnt=0; 39 for(int i=0;i<2;i++) 40 { 41 scanf("%s",s); 42 int p=0; 43 draw(s,p,0,0,len); 44 } 45 printf("There are %d black pixels. ",cnt); 46 } 47 return 0; 48 }
有个BUG就是cnt放在前面就凉了,为啥呀