四分树,紫书P160UVa297

来源:互联网 发布:兴登堡号飞艇数据 编辑:程序博客网 时间:2024/06/06 04:31

本题虽然是非二叉树,但考察的实质依旧是DFS递归构建树的方法。
本题终于是自己敲的码,跟刘的解题思路一模一样,但是个人感觉自己只使用了一个数组,较为精简了一点。其中本题在写dfs函数的时候参数传递比较容易出错,其他的都算比较简单。至于两个图像的累加,数组标记即可。

// UVa297 Quadtrees// scienceZ#include <cstdio>#include <iostream>#include <cstring>using namespace std;int arr[1024+20];int n, sum;void dfs(int a, int n){    char t;    int k = n - a + 1;    while((t=getchar())=='\n');     if(t == 'p'){    dfs(a, a+k/4-1);    dfs(a+k/4, a+k/2-1);    dfs(a+k/2, a+(3*k/4)-1);    dfs(a+(3*k/4), a+k-1);    }else if(t == 'f' )for (int i = a; i<=n; i++)if(!arr[i]){        arr[i] = 1;        sum++;    }   }int main(){    cin >> n;    while(n--){        sum = 0;        memset(arr, 0, sizeof(arr));        dfs(1, 1024);        dfs(1, 1024);        printf("There are %d black pixels.\n", sum);    }    return 0;} 
原创粉丝点击