uva 297 Quadtrees
2013-10-07 14:59
363 查看
二叉树的先序遍历题目,不需要建立二叉树,用两个一维数组模拟像素的位置就行了,最后归并两个一维数组中的内容就行了。调试还真花了点时间,递归程序一定要谨慎地写代码,要不然很容易出现漏洞。
#include <stdio.h> #include <string.h> #include <math.h> #define MAX_LEN 10000 char buffer1[MAX_LEN]; char buffer2[MAX_LEN]; unsigned char black1[1025]; unsigned char black2[1025]; int buffer_index; //start_addr是当前的树的第一个叶子节点的起始下标 void pre_travel(char *buffer, int depth, int start_addr) { int aver; //四个子树里面每个子树涵盖多少个点 aver = 1024/(int)pow(4.0, depth); if(buffer[buffer_index] == 'f') { if(buffer == buffer1) memset(black1+start_addr, 1, aver); else if(buffer == buffer2) memset(black2+start_addr, 1, aver); return; } if(buffer[buffer_index] == 'e') { return; } if(buffer[buffer_index] == 'p') { buffer_index++; pre_travel(buffer, depth+1, start_addr); buffer_index++; pre_travel(buffer, depth+1, start_addr+aver/4); buffer_index++; pre_travel(buffer, depth+1, start_addr+aver/4*2); buffer_index++; pre_travel(buffer, depth+1, start_addr+aver/4*3); } } void func() { int i, count; memset((void*)black1, 0, 1025); memset((void*)black2, 0, 1025); buffer_index = 0; pre_travel(buffer1, 0, 1); buffer_index = 0; pre_travel(buffer2, 0, 1); count = 0; for(i=1; i<=1024; i++) if(black1[i] || black2[i]) count ++; printf("There are %d black pixels.\n", count); } int main(void) { int n, i; //freopen("input.dat", "r", stdin); scanf("%d", &n); getchar(); for(i=0; i<n; i++) { gets(buffer1); gets(buffer2); func(); } return 0; }
相关文章推荐
- uva 297 - Quadtrees
- UVA-297 Quadtrees
- uva 297 Quadtrees
- Quadtrees UVA 297 四分树
- Uva 297 - Quadtrees
- Quadtrees UVA297
- uva 297 Quadtrees
- uva-297 Quadtrees
- uva_297_Quadtrees
- UVA - 297 Quadtrees
- UVA 297 四叉树合并 Quadtrees
- uva_297-Quadtrees
- UVa 297 - Quadtrees
- uva 297 Quadtrees
- UVA - 297 Quadtrees
- Uva 297 - Quadtrees
- UVa 297 - Quadtrees
- 【例题 6-11 UVA-297】Quadtrees
- UVA 297-Quadtrees
- uva 297 - Quadtrees