到某个点的最短距离                到终点的最短路径

完整代码

 #include <iostream>
#include <string>
#include <utility>
#include <vector>
#include <deque>
#include <boost/graph/adjacency_list.hpp>
//A*寻路算法
#include <boost\graph\astar_search.hpp>
#include <boost\graph\dijkstra_shortest_paths.hpp>
using namespace std;
using namespace boost; void main()
{
//定义图的种类
typedef adjacency_list<listS, vecS, directedS, no_property, property<edge_weight_t, double>> graph_t;
//定义相关类型
typedef graph_traits<graph_t>::vertex_descriptor vertex_desciptor;
typedef graph_traits<graph_t>::edge_descriptor edge_descriptor;
typedef pair<int, int> Edge; //定义结点和边的相关对象和属性
enum nodes { A, B, C, D, E, F, G, H, N };
char name[] = "ABCDEFGH";
//创建边
Edge edge_array[] = { Edge(A,B),Edge(A,C),Edge(B,D),Edge(B,E),Edge(C,E),
Edge(C,F),Edge(F,G),Edge(G,H),Edge(E,H),Edge(D,E),Edge(D,H) };
//定义边的权重
double weights[] = { ,,1.3,,,,1.2,0.5,1.3,0.4,6.3 };
//边的数量
int num_arcs = sizeof(edge_array) / sizeof(Edge); //生成被建模的图对象
// 边数组头地址 边数组尾地址 定义权重 结点数量
graph_t g(edge_array, edge_array + num_arcs, weights, N); //p用于放置最短路径生成树的各个顶点的下一个节点
std::vector<vertex_desciptor> p(num_vertices(g));
//d用于放置从近到远的路径距离
std::vector<double> d(num_vertices(g));
//待求最短路径的源顶点
vertex_desciptor s = vertex(A, g); //对图g的A顶点(s为它的描述器,即从哪个点开始)应用dijkstra算法
//作为结果的距离矢量保存在d数组中
//最短路径树上的父节点保存在p数组中
dijkstra_shortest_paths(g, s, predecessor_map(&p[]).distance_map(&d[]));
std::cout << "最短路径延时(ms)" << "\t最短路径树的父节点:" << std::endl;
//输出结果到屏幕
graph_traits <graph_t>::vertex_iterator vi, vend;
for (tie(vi, vend) = vertices(g); vi != vend; vi++)
{
std::cout << "路径距离(" << name[*vi] << ") = " << d[*vi] << ",\t";
std::cout << "父节点(" << name[*vi] << ") = " << name[p[*vi]] << endl;
}
cout << endl;
system("pause");
}

20.boost dijkstra最短路径算法的更多相关文章

  1. Java邻接表表示加权有向图,附dijkstra最短路径算法

    从A到B,有多条路线,要找出最短路线,应该用哪种数据结构来存储这些数据. 这不是显然的考查图论的相关知识了么, 1.图的两种表示方式: 邻接矩阵:二维数组搞定. 邻接表:Map<Vertext, ...

  2. 练习 Dijkstra 最短路径算法。

    练习 Dijkstra 最短路径算法. #coding: utf-8 # Author: woodfox, Oct 14, 2014 # http://en.wikipedia.org/wiki/Di ...

  3. 数据结构(c++)(第二版) Dijkstra最短路径算法 教学示范代码出现重大问题!

    前言 去年在数据结构(c++)的Dijkstra教学算法案例中,发现了一个 bug 导致算法不能正常的运行,出错代码只是4行的for循环迭代代码. 看到那里就觉得有问题,但书中只给了关键代码的部分,其 ...

  4. Dijkstra最短路径算法[贪心]

    Dijkstra算法的标记和结构与prim算法的用法十分相似.它们两者都会从余下顶点的优先队列中选择下一个顶点来构造一颗扩展树.但千万不要把它们混淆了.它们解决的是不同的问题,因此,所操作的优先级也是 ...

  5. 一篇文章讲透Dijkstra最短路径算法

    Dijkstra是典型最短路径算法,计算一个起始节点到路径中其他所有节点的最短路径的算法和思想.在一些专业课程中如数据结构,图论,运筹学等都有介绍.其思想是一种基础的求最短路径的算法,通过基础思想的变 ...

  6. Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法

    1. 前言 因无向.无加权图的任意顶点之间的最短路径由顶点之间的边数决定,可以直接使用原始定义的广度优先搜索算法查找. 但是,无论是有向.还是无向,只要是加权图,最短路径长度的定义是:起点到终点之间所 ...

  7. Dijkstra最短路径算法实例

    #include <stdio.h>#include <stdlib.h>/* Dijkstra算法 */#define VNUM 5#define MV 65536int P ...

  8. 7-9 旅游规划(25 分)(Dijkstra最短路径算法)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  9. 关于Dijkstra最短路径算法

    Dijkstra算法,不是很明白,今天找了一些博客看了一下,决定自己也写一个为以后忘记的时候可以看做准备. 实际上,如果理解没错的话,该算法实际上和枚举法有点像,只不过,在选取出发路径的路径都是最短路 ...

随机推荐

  1. Vmware VM共享

    打开虚拟机,设置,选项点击共享文件夹 点击启用,将电脑windows的目录添加过来 进入终端即可以进入

  2. Jenkins+Docker部署Maven聚合工程

    这几天,把公司的预发布环境,改成docker部署,遇到了一些坑,有jenkins里的部署脚本的问题,也有harbor仓库的问题,还有docker远程访问的问题,还有DooD....一堆坑 Jenkin ...

  3. Oracle学习系类篇(二)

    1.Oracle对表的增删改 1.1添加列 1.2修改列 1.3 删除列 1.4 修改表名称 1.5 修改列名称 1.6 删除主键约束 1.7 添加主键约束 1.8 添加外键约束

  4. centos7 usually use

    firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.22.103 port port=8 ...

  5. PHP魔术方法__clone()篇

    PHP中定义了一个内置方法__clone()来调整兑现的克隆行为: 当一个对象被克隆的时候会自动执行__clone()方法,而复制的对象可以在其方法内进行调整 header('Content-type ...

  6. 使用 Object.create实现js 继承

    二.Object.create实现继承 本文将来学习第七种继承方式Object.create()方法来实现继承,关于此方法的详细描述,请戳这里.下面来通过几个实例来学习该方法的使用: var Pare ...

  7. Python多线程一学就会!

    免费Python课程:阿里云大学——开发者课堂 Python中使用线程有两种方式:函数或者用类来包装线程对象. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.语 ...

  8. 使用CablleStatement调用存储过程

    /** * 使用CablleStatement调用存储过程 * @author APPle * */ public class Demo1 { /** * 调用带有输入参数的存储过程 * CALL p ...

  9. Java 面向对象详解

    0 引言 接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学过的基础知识的想法. 1 面向对象 面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设 ...

  10. Day 07 -02 拷贝 浅拷贝 深拷贝

    必考 存一个值还是多个值 一个值:整型/浮点型/字符串 多个值:列表/元祖/字典/集合 有序or 无序 有序:字符串/列表/元祖 无序:字典/集合 可变or 不可变 可变:列表/字典/集合 不可变:整 ...