如何实现分支具有价值的树

时间:2019-01-29 19:50:21

标签: c++ tree

在两个节点(分支可以说)之间的连接是否可以包含值?

使用这种方法可能会有一个成本变量,程序要从一个节点遍历到根,就必须找到最具成本效益的路线。

illustrated as shown 如图所示

1 个答案:

答案 0 :(得分:4)

这在图形问题中相当普遍。通常,您创建一个名为Edge(或者可能是Arc,或者有些人称之为lines的类),其中包含两个节点之间的关联以及该Edge / Arc / Line的权重

// Warning: this is really pseudo-code.

class Node;

class Edge {
    unsigned weight;
    Node *node;
};

class Node {    // Also often called a Vertex
    std::vector<Edge> edges;
    // ...
};

// find minimum cost path from start to end in a DAG:
unsigned find_path(Node &start, Node &end) { 
    unsigned current_weight = -1;

    for (auto const &e : start.edges) {
        if (e == end)
            return e.weight;
        weight = e.weight + find_path(*(e.node))
        if (weight < current_weight)
            current_weight = weight;
    return current_weight;
}

请注意,这只是最明显的蛮力DFS遍历算法,因此对于大型图形或类似图形而言,这是不实际的。应该足以传达总体思想。

当然,可以在此处添加更多内容。这只是最简短的草图,至少可以为您提供一个方向的起点。