uva 297(二叉树)

来源:互联网 发布:知乎联合创始人张亮 编辑:程序博客网 时间:2024/05/26 12:56

题解:建两棵树然后深搜遍历,需要注意在深搜的函数里随着树的层次变深,每个黑色小方块的值也在不断减小,所以累加的值是 1024 / pow (4, l),l是数的深度。

#include <cstdio>#include <string>#include <iostream>#include <cmath>using namespace std;const int N = 10010;struct Node {    char c;    Node* s[4];    Node() {        c = '\0';        s[0] = s[1] = s[2] = s[3] = NULL;    }};int len, sum, i;Node* build(string str) {    i++;    if (i == len)        return NULL;    Node* node = new Node;    node -> c = str[i];    if (node -> c == 'p') {        node -> s[0] = build(str);        node -> s[1] = build(str);        node -> s[2] = build(str);        node -> s[3] = build(str);    }    return node;}void dfs(Node* node1, Node* node2, int l) {    if (node1 == NULL && node2 == NULL)        return;    if (node2 == NULL) {        if (node1 -> c == 'f') {            sum += 1024 / pow(4, l);            return;        }        for (int i = 0; i < 4; i++)            dfs(node1 -> s[i], node2, l + 1);        return;    }    if (node1 == NULL) {        if (node2 -> c == 'f') {            sum += 1024 / pow(4, l);            return;        }        for (int i = 0; i < 4; i++)            dfs(node1, node2 -> s[i], l + 1);        return;    }    if (node1 -> c == 'f' || node2 -> c == 'f') {        sum += 1024 / pow(4, l);        return;    }    for (int i = 0; i < 4; i++)        dfs(node1 -> s[i], node2 -> s[i], l + 1);    return;}void Delete(Node* node) {    if (node == NULL)        return;    for (int i = 0; i < 4; i++)        if (node -> s[i] != NULL)            Delete(node -> s[i]);    delete node;}int main() {    int t;    string str1, str2;    scanf("%d", &t);    getchar();    while (t--) {        sum = 0;        getline(cin, str1);        getline(cin, str2);        len = str1.size();        i = -1;        Node* root1 = build(str1);        len = str2.size();        i = -1;        Node* root2 = build(str2);        dfs(root1, root2, 0);        printf("There are %d black pixels.\n", sum);        Delete(root1);        Delete(root2);    }    return 0;}


0 0
原创粉丝点击