答案 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遍历算法,因此对于大型图形或类似图形而言,这是不实际的。应该足以传达总体思想。
当然,可以在此处添加更多内容。这只是最简短的草图,至少可以为您提供一个方向的起点。