• 数据结构:四分树


    紫书原题,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放在前面就凉了,为啥呀

  • 相关阅读:
    冲刺二4
    第十四周总结
    大道至简阅读笔记02
    冲刺二3
    冲刺二2
    大道至简阅读笔记01
    冲刺二1
    第十三周总结
    第一阶段意见评价
    5月23日团队开发日志
  • 原文地址:https://www.cnblogs.com/aininot260/p/9530698.html
Copyright © 2020-2023  润新知