c++ - 给定邻接表有向图,如何仅获得 2 个节点之间的最短路径?

标签 c++ algorithm boost dijkstra boost-graph

<分区>

我有一个用以下代码表示的图表:

typedef adjacency_list < vecS, vecS, directedS, property < vertex_name_t, idType >, property < edge_weight_t, double > > graph_t;

我有两个问题:

  1. 如何在 Boost 中将我的图输入 Dijkstra 算法,我的意思是如何从我的图(它是数千个顶点和边)中提取属性以提供 Dijkstra 参数。

  2. 示例中算法的输出是图中一个节点与其余节点之间的最短路径,那么我如何才能只获得我的源节点和目标节点之间的最短路径?我应该过滤输出结果以构建我的最短路径 vector 吗?

//===========================================================================
MyAlgorithm::MyAlgorithm(graph_t AnyGraph, Vertex VSource){// Parameters Constructor

  MyGraph = AnyGraph;
  vector<Vertex> p(num_vertices(AnyGraph));
  //  for(auto j = p.begin(); j != p.end(); ++j)
  //      cout <<"P["<< *j<<"] = "<<p[*j]<<endl; 
  vector<double> d(num_vertices(AnyGraph));
  //  for(auto j2 = d.begin(); j2 != d.end(); ++(j2))
  //      cout <<"d ["<< *(j2)<<"] = "<<d[*(j2)]<<endl; 
  //===========================================================================
  //Dijkstra_Algorithm
  //===========================================================================
  cout<<"Before\t"<<endl;
  dijkstra_shortest_paths(AnyGraph, VSource,
                          predecessor_map(boost::make_iterator_property_map(p.begin(), get(boost::vertex_index, AnyGraph))).
                          distance_map(boost::make_iterator_property_map(d.begin(), get(boost::vertex_index, AnyGraph))));
  cout<<"After\t"<<endl;
  //===========================================================================
}// End of Parameters Constructor

最佳答案

我正在回答你的第二个问题:

你不能只向 dijkstra 算法询问一条路径,因为路径是逐渐形成的,但是,你仍然可以为每个节点保存一个父节点,它说明在起始节点之间的路径中哪个节点是该节点的前一个节点和结束节点。之后就可以从目标节点开始,获取它的父节点,直到到达起始节点。

关于c++ - 给定邻接表有向图,如何仅获得 2 个节点之间的最短路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010991/

相关文章:

c++ - 为什么 C++ iostream 总是左手分配?

c++ - isalnum 的范围解析运算符

c++ - "more than one instance of overloaded function "标准::战俘 "matches the argument list"

python - RNG 技术的便携性和可重复性

arrays - 如何计算最接近中位数的 k 个数字?

c++ - 函数返回的 boost::multi_array_ref 安全吗?

c++ - 仅由表定义的评估函数,C++

algorithm - 仅使用距离矩阵计算加权平均值

c++ - 错误 : BOOST DISABLE THREADS

c++ - 用最少的代码实现 pImpl