18.boost Ford最短路径算法(效率低)

到某个节点最近距离                  最短路径当前节点的父节点

完整代码

 1 #include <iostream>
 2 #include <string>
 3 #include <utility>
 4 #include <vector>
 5 #include <deque>
 6 #include <boost/graph/adjacency_list.hpp>
 7 //A*寻路算法
 8 #include <boost\graph\astar_search.hpp>
 9 //dijsktra
10 #include <boost\graph\dijkstra_shortest_paths.hpp>
11 //bellman-Ford算法
12 #include <boost\graph\bellman_ford_shortest_paths.hpp>
13 using namespace std;
14 using namespace boost;
15
16
17 void main()
18 {
19     //定义节点和边的相关对象和属性
20     enum { u, v, x, y, z, N };
21     char name[] = { ‘u‘, ‘v‘, ‘x‘, ‘y‘, ‘z‘ };
22     typedef std::pair < int, int >E;
23     E edge_array[] = { E(u, y), E(u, x), E(u, v), E(v, u),
24         E(x, y), E(x, v), E(y, v), E(y, z), E(z, u), E(z, x) };
25     int weights[] = { -4, 8, 5, -2, 9, -3, 7, 2, 6, 7 };
26     int num_arcs = sizeof(edge_array) / sizeof(E);
27
28     //定义所用的图种类和相关类型
29     typedef adjacency_list < vecS, vecS, directedS,
30         no_property, property < edge_weight_t, int > > Graph;
31     //生成图对象
32     Graph g(edge_array, edge_array + num_arcs, weights, N);
33     graph_traits < Graph >::edge_iterator ei, ei_end;
34
35     //distance用于放置依近到远的路径距离
36     std::vector<int> distance(N, (std::numeric_limits < short >::max)());
37     //parent用于放置最短路径生成树的各个顶点的父节点
38     std::vector<std::size_t> parent(N);
39     for (int i = 0; i < N; ++i)
40         parent[i] = i;
41
42
43     //将源点z对应距离设为0
44     distance[z] = 0;
45     //应用Bellman-Ford算法
46     bool r = bellman_ford_shortest_paths
47     (g, int(N), weight_map(get(edge_weight, g)).distance_map(&distance[0]).
48         predecessor_map(&parent[0]));
49
50     if (r)
51     {
52         std::cout << "源点z到各点的最短路径\n";
53         std::cout << "目的点\t" << "最短路径\t" << "最短路径树的父节点:\n";
54         for (int i = 0; i < N; ++i)
55             std::cout << name[i] << ": \t" << distance[i]
56             << "\t\t" << name[parent[i]] << std::endl;
57     }
58     else
59         std::cout << "negative cycle" << std::endl;
60
61     system("pause");
62 }

原文地址:https://www.cnblogs.com/xiaochi/p/8673287.html

时间: 2024-10-29 19:31:48

18.boost Ford最短路径算法(效率低)的相关文章

17.boost dijkstra最短路径算法

到某个点的最短距离                到终点的最短路径 完整代码 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <vector> 5 #include <deque> 6 #include <boost/graph/adjacency_list.hpp> 7 //A*寻路算法 8 #include <boost\gr

Bellman ford 最短路径算法

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" /> 下表记录S到每一个节点的距离: 第一次迭代, S->A = 4 ,由于S->A眼下为INF.因此更新MIN(S->A)为4 S->B = 6.由于S->B眼下为INF.因此更新MIN(S->B)为6 S->C

Bellman-Ford 单源最短路径算法

Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年,而实际上 Edward F. Moore 也在 1957 年发布了相同的算法,因此,此算法也常被称为 Bellman-Ford-Moore 算法. Bellman-Ford 算法和 Dijkstra 算法同为解决单源最短路径的算法.对于带权有向

基于java最短路径算法公交查询系统的设计与实现

基于J2EE的公交查询系统的设计与实现 1引言 1.1 选题背景 20多年来,我国经济得到了持续.快速.稳定.健康地发展.经济的快速增长,带动了汽车工业的蓬勃发展,并使交通状况显著改善.据统计,中国公路通车总里程已达130余万公里,其中高速公路约1.5万公里.居民收入普遍提高,到2000年年底,人均GDP已超过800美元,沿海地区已达2000-3000美元.按国际发展惯例,当人均GDP超出1000美元,汽车消费市场就将进入快速增长期.我国城市人口约有2亿,略低于美国人口.东部沿海地区大部分居民已

最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)

一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine-->mine..... 那么,就存在这样一个问题:给定一个单词作为起始单词(相当于图的源点),给定另一个单词作为终点,求从起点单词经过的最少变换(每次变换只会变换一个字符),变成终点单词. 这个问题,其实就是最短路径问题. 由于最短路径问题中,求解源点到终点的最短路径与求解源点到图中所有顶点的最短路径复

Johnson 全源最短路径算法

解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: Bellman-Ford 单源最短路径算法:时间复杂度为 O(VE),适用于带负权值情况: 对于全源最短路径问题(All-Pairs Shortest Paths Problem),可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离.例如,对每个顶点应用 Bel

Dijkstra 单源最短路径算法

Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年构思并于 1959 年发表.其解决的问题是:给定图 G 和源顶点 v,找到从 v 至图中所有顶点的最短路径. Dijkstra 算法采用贪心算法(Greedy Algorithm)范式进行设计.在最短路径问题中,对于带权有向图 G = (V, E),Dijkstra 算法的初始实现版本未使用最小优先

Floyd-Warshall 全源最短路径算法

Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Problem),其中图 G 允许存在权值为负的边,但不存在权值为负的回路.Floyd-Warshall 算法的运行时间为 Θ(V3). Floyd-Warshall 算法由 Robert Floyd 于 1962 年提出,但其实质上与 Bernad Roy 于 1959 年和 Stephen Warshal

dijkstra 最短路径算法

Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低. Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等. 其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合.一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知. 初始时,S