Boost dijkstra 单元最段路径示例

原创 2005年02月25日 17:52:00

//整理 by RobinKin  from DevonIT

#include <boost/config.hpp>
#include <iostream>
#include <fstream>

#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>

using namespace boost;

int
main(int, char *[])
{
  typedef adjacency_list < listS, vecS, directedS,
    no_property, property < edge_weight_t, int > > graph_t;
  typedef graph_traits < graph_t >::vertex_descriptor vertex_descriptor;
  typedef graph_traits < graph_t >::edge_descriptor edge_descriptor;
  typedef std::pair<int, int> Edge;

  const int num_nodes = 5;
  enum nodes { A, B, C, D, E };
  char name[] = "ABCDE";
  Edge edge_array[] = { Edge(A, C), Edge(B, B), Edge(B, D), Edge(B, E),
    Edge(C, B), Edge(C, D), Edge(D, E), Edge(E, A), Edge(E, B)
  };
 
  int weights[] = { 1, 2, 1, 2, 7, 3, 1, 1, 1 };

  int num_arcs = sizeof(edge_array) / sizeof(Edge);
 
  graph_t g(edge_array, edge_array + num_arcs, weights, num_nodes);
 
  property_map<graph_t, edge_weight_t>::type weightmap = get(edge_weight, g);
 
  std::vector<vertex_descriptor> p(num_vertices(g));//前驱结点
  std::vector<int> d(num_vertices(g));    //距离
  vertex_descriptor s = vertex(A, g);  //源点是A

//从A开始计算最短路径

  dijkstra_shortest_paths(g, s, predecessor_map(&p[0]).distance_map(&d[0]));

  std::cout << "distances and parents:" << std::endl;
  graph_traits < graph_t >::vertex_iterator vi, vend;
  for (tie(vi, vend) = vertices(g); vi != vend; ++vi) {
    std::cout << "distance(" << name[*vi] << ") = " << d[*vi] << ", ";
    std::cout << "parent(" << name[*vi] << ") = " << name[p[*vi]] << std::
      endl;
  }

  return EXIT_SUCCESS;
}

//输出:

distances and parents:
distance(A) = 0, parent(A) = A
distance(B) = 6, parent(B) = E
distance(C) = 1, parent(C) = A
distance(D) = 4, parent(D) = C
distance(E) = 5, parent(E) = D

相关文章推荐

boost bgl dijkstra算法

 #include #include #include #include #include #include #include using namespace boost;//链接表typedef a...

Boost Graph Library 快速入门

Boost Graph Library 快速入门    图领域的数据结构和算法在某些方面比容器更为复杂,图算法在图中移动有着众多的路线,而STL使用的抽象迭代器接口不能有效的支持这些。作为替换,我们...

两点之间所有的最短路的算法(Multi-Dijkstra-shortest paths)

摘要 本文主要讲述计算两点之间所有的最短路,有一个误解需要澄清,即两点之间不只有一条最短路!两点之间可能含有多条最短路! 1. 问题引入及介绍 /> 如上图所示,节点对之间的最短路径有两条,一条...

boost中dijkstra算法简单示例

我们经常用dijkstra算法来计算最短路径,其原理可以参考http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm.                ...

单元最短路径——Dijkstra

1.算法思想    输入:带权有向图(权重均为非负值)G(V,E)、权重函数ω、源点s   过程:维持一个集合S,从源点s到S的最短路径都已经寻找到,最短路径权重保存在每个结点的d值当中。每一次从V-...

eoj1817 dijkstra单元最短路径 普通方法+二叉堆优化

求出有n(1 Input 第一行有2个整数n和m(0 Output 输出结点1到结点n之间的最短路径,如果1到n之间不存在路径,输出 -1。 Sample Input 3 3 ...

单元Dijkstra算法求最短路径的的Java实现

上一篇写了无权值的最短路径的求法,是利用广度优先搜索的方法使用队列实现的,当有权值时,我们通常使用Dijkstra算法来求解最短路径的问题,这里我们假设所有的权值都是正值。 首先,在节点类改变了权值的...

Dijkstra算法(单元点最短路径)

Dijkstra算法解决图中某特定点到其他点的最短路径。 迪杰斯塔拉(Dijkstra)算法思想: 按路径长度递增的次序产生最短路径的算法。设集合S存放已经找到最短路径的顶点,V为所有节点的集合,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Boost dijkstra 单元最段路径示例
举报原因:
原因补充:

(最多只允许输入30个字)