【发布时间】:2013-11-25 17:50:46
【问题描述】:
总的来说,我是提升图和图论的新手。碰巧的是,我对图算法术语的了解有限,这让我感到很困难。无论如何,这就是我想要做的。
我正在使用boost::adjacency_list,假设我有一个顶点
struct Node {
int level;
}
现在我已经构建了一个完整的图,我想找到每个节点的级别。对我来说,级别在这里意味着节点距根的最大深度。例如考虑图(假设 118 是根节点)
118 -> 122
118 -> 120
122 -> 120
122 -> 121
121 -> 125
121 -> 123
123 -> 125
125 -> 124
然后是122 is 1, 120 is 2, 121 is 2, 123 is 3, 125 is 4, and 124 is 5的级别。
在 boost 中是否有任何算法可以让我做到这一点。我敢打赌它是boost::bredth_first_visit。但我不确定如何正确使用它,以便在访问时将正确的值放入Node.level。
我在类似问题上发现了另一篇关于堆栈溢出的帖子,这是一种解决方案(它不适合我。)
typedef boost::property_map<TaskGraph, boost::vertex_color_t>::type color_map_t;
color_map_t colorMap; //Create a color map
boost::breadth_first_visit(graph, *boost::vertices(graph).first, boost::color_map(colorMap));
我想做的是像
boost::breadth_first_visit(graph, *boost::vertices(graph).first, /*What goes here so that Node.level gets the level*/);
感谢您的帮助,并对术语感到抱歉。不确定level 是否是图论中的正确术语。
【问题讨论】:
-
如果“级别”的意思是“从根节点到节点的最大深度”,那么也许你可以解释到节点 123 的深度是 4,因为从根节点的唯一路径是 118 -> 122 -> 121 -> 123,看起来深度为 3...另外,当一个节点有多个路径时,我不确定“级别”是一个定义明确的概念...
-
他可能是指成本最高的节点,每次遍历的成本为1。
-
@StevenMorad 是的,这正是我的意思。原帖有些问题。我现在已经编辑了。