C++ 访问者提供从根到每个分支端的所有顶点路由
我发现这是为了构建一个深度优先搜索的访问者,但我不确定如何构建一个符合我意图的访问者 我有一棵未称重的树。我想找到从根到每个分支末端的所有最短路径,一个只有一条边连接到图的其余部分的顶点 例如,在这张从别处借来的图表中 如果12是根,则分支末端将是4、1、9、10和7。第一条路线将包含12、11、5、2、4。第二条路线将包含12、11、5、2、1。等等 在提供的示例中C++ 访问者提供从根到每个分支端的所有顶点路由,c++,boost,depth-first-search,boost-graph,visitor,C++,Boost,Depth First Search,Boost Graph,Visitor,我发现这是为了构建一个深度优先搜索的访问者,但我不确定如何构建一个符合我意图的访问者 我有一棵未称重的树。我想找到从根到每个分支末端的所有最短路径,一个只有一条边连接到图的其余部分的顶点 例如,在这张从别处借来的图表中 如果12是根,则分支末端将是4、1、9、10和7。第一条路线将包含12、11、5、2、4。第二条路线将包含12、11、5、2、1。等等 在提供的示例中 class MyVisitor : public boost::default_dfs_visitor { public:
class MyVisitor : public boost::default_dfs_visitor
{
public:
void discover_vertex(MyVertex v, const MyGraph& g) const
{
cerr << v << endl;
return;
}
};
我看不到一种方法来确定当前正在搜索哪个路由
如何实现我的意图?如果要跟踪当前正在探索的路由顶点,可以在访问者中使用类似于Precedure_recorder的代码 可在此处找到有关预定义的前置\u记录器的详细信息:
事实上,您可能会更好地使用dijkstra_最短路径。该算法为您报告一个前置映射。你可以打电话给Dijkstra,然后简单地浏览之前的地图,为感兴趣的顶点生成感兴趣的路径。对不起,我已经仔细阅读了这个问题,现在我一点也不懂。显然,您无法更改boost访问者界面。你的访客对象可能会跟踪路线。谢谢你的隐藏金块。我想我遗漏了一些基本的东西,因为我似乎无法从这些函数的输出中重建路径:我避免了Dijkstra,因为我使用的是捆绑属性,并且不知道如何应用权重。在我的例子中,权重都是相等的;这就是为什么不能从它们的输出中提取它。您可以使用Precedure_recorder解决这个问题,它将注册Precedure。要使用所有边权重都等于1的Dijkstra,请将“boost::dummy_property_map1”作为边权重映射传递给Dijkstra。