297 - Quadtrees

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string>
 4 using namespace std;
 5 struct node{
 6     int black;
 7     node* first;
 8     node* second;
 9     node* third;
10     node* forth;
11 };
12 int cur;
13 string str;
14 int flag[1024];
15 void lable(int begin,int end)
16 {
17     for(int i=begin;i<=end;i++)
18         flag[i]=1;
19 }
20 node* build()
21 {
22     node* p=new node;
23     cur++;
24     if(str[cur]=='p')
25     {
26         p->black=0;
27         p->first=build();
28         p->second=build();
29         p->third=build();
30         p->forth=build();
31     }
32     else 
33     {
34         p->black=(str[cur]=='f'?1:0);
35         p->first=NULL;
36         p->second=NULL;
37         p->third=NULL;
38         p->forth=NULL;
39     }
40     return p;
41 }
42 void traverse(node *p,int times,int begin)
43 {
44    if(p->first==NULL&&p->second==NULL&&p->third==NULL&&p->forth==NULL)
45    {
46        if(p->black==1)
47           lable(begin,begin+times-1);
48    }
49    else
50    {
51      if(p->first)
52         traverse(p->first,times/4,begin);
53      if(p->second)
54          traverse(p->second,times/4,begin+times/4);
55      if(p->third)
56         traverse(p->third,times/4,begin+times/2);
57      if(p->forth)
58         traverse(p->forth,times/4,begin+(times/4)*3);
59    }
60 }
61 int main()
62 {
63    int n;
64    while(cin>>n)
65    {
66        getchar();
67        for(int c=0;c<n;c++)
68        {
69         getline(cin,str);
70         cur=-1;
71        node* root1=build();
72        traverse(root1,1024,0);
73        getline(cin,str);
74        cur=-1;
75        node* root2=build();
76        traverse(root2,1024,0);
77        int count=0;
78        int i;
79        for(i=0;i<1024;i++)
80            if(flag[i]==1)
81                count++;
82            cout<<"There are "<<count<<" black pixels."<<endl;
83         for(i=0;i<1024;i++)
84             flag[i]=0;
85        }
86    }
87    return 0;
88 }

 

  

posted @ 2013-03-31 00:05  sooflow  阅读(128)  评论(0)    收藏  举报