UVA 297 - Quadtrees(建树)
2015-05-24 15:41
316 查看
比较麻烦做了一下午,主要是先建好这两棵树,然后在创建最后的树时顺便求出节点的面积。收获挺大的!
#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; #define M 1000 char str1[M],str2[M]; typedef struct treenode { int data; treenode *a,*b,*c,*d; }*Tree; int i,sum; Tree &CreatTree(Tree &T,char *str,int fix) { ++i;//printf("i=%d,str[i]=%c,fix=%d\n",i,str[i],fix); T=(Tree)malloc(sizeof(treenode)); if(!T)exit(1); if(str[i]=='p') { T->data=0; T->a=CreatTree(T->a,str,fix/2); T->b=CreatTree(T->b,str,fix/2); T->c=CreatTree(T->c,str,fix/2); T->d=CreatTree(T->d,str,fix/2); } else if(str[i]=='f') { T->data=fix*fix; T->a=NULL; T->b=NULL; T->c=NULL; T->d=NULL; } else if(str[i]=='e') { T->data=0; T->a=NULL; T->b=NULL; T->c=NULL; T->d=NULL; } return T; } void PreOrder(Tree &T) { if(!T)return ; if(T->data!=0) { sum+=T->data; //printf("xxxxxxxxxxxx%d ",T->data); } else { PreOrder(T->a); PreOrder(T->b); PreOrder(T->c); PreOrder(T->d); } } Tree &CreatNewTree(Tree &T1,Tree &T2) { Tree T; T=(Tree)malloc(sizeof(treenode)); if(T1->data||T2->data) { T->data = T1->data>=T2->data?T1->data:T2->data; sum+=T->data;//printf("yyyyyyyyyyyyy%d ",T->data); T->a=NULL; T->b=NULL; T->c=NULL; T->d=NULL; } else { T->data=0; if(T1->a&&T2->a) T->a=CreatNewTree(T1->a,T2->a); else if(T1->a) { T->a=T1->a; PreOrder(T->a); } else if(T2->a) { T->a=T2->a; PreOrder(T->a); } if(T1->b&&T2->b) T->b=CreatNewTree(T1->b,T2->b); else if(T1->b) { T->b=T1->b; PreOrder(T->b); } else if(T2->b) { T->b=T2->b; PreOrder(T->b); } if(T1->c&&T2->c) T->c=CreatNewTree(T1->c,T2->c); else if(T1->c) { T->c=T1->c; PreOrder(T->c); } else if(T2->c) { T->c=T2->c; PreOrder(T->c); } if(T1->d&&T2->d) T->d=CreatNewTree(T1->d,T2->d); else if(T1->d) { T->d=T1->d; PreOrder(T->d); } else if(T2->d) { T->d=T2->d; PreOrder(T->d); } } return T; } int main() { int t; Tree T1,T2; scanf("%d",&t); getchar(); while(t--) { gets(str1); i=-1; T1=CreatTree(T1,str1,32); gets(str2); i=-1; T2=CreatTree(T2,str2,32); sum=0; Tree T=CreatNewTree(T1,T2); //PreOrder(T); printf("There are %d black pixels.\n",sum); } return 0; }
相关文章推荐
- UVA 297 Quadtrees(四叉树建树、合并与遍历)
- UVA 297 Quadtrees(四叉树建树、合并与遍历)
- UVA 297 Quadtrees(四叉树建树、合并与遍历)
- 紫书第六章-----数据结构基础(例题6-11 四分树Quadtrees UVA - 297)
- UVA-297 Quadtrees (四分树)
- UVa 297 Quadtrees -SilverN
- UVA 297 Quadtrees(四叉树)
- UVa 297 Quadtrees
- Uva297 Quadtrees【递归建四分树】【例题6-11】
- UVa 297 - Quadtrees
- uva 297 Quadtrees
- uva 297 quadtrees——yhx
- UVA - 297 Quadtrees
- uva297 Quadtrees (树的重建)
- UVa 297 Quadtrees(模拟&四分树)
- UVA - 297 Quadtrees(四分图)
- UVa 297 - Quadtrees
- UVa 297 Quadtrees(四分树)
- Quadtrees UVA - 297
- UVA - 297Quadtrees(四分图)