带权图上的三个问题

1.最短路问题
设带权图G(V, E, W),且每一条边的权都是非负实数。对任意u,v∈V,当u和v连通(u可达v)时,称从u到v长度最短的路径为u到v的最短路径,该路径的长度称作距离d(u, v)。约定d(u, u) = 0,当u不可达v时d(u, v) = ∞。

Dijkstra算法
输入:带权图G(V, E, W)和s∈V,其中|V| = n,对任意e∈E,W(e)≥0。
输出:s到G中每一个点的最短路径及距离
记每一个顶点的标号L(v) = (L1(v), L2(v))。标号分为永久标号和临时标号。对永久标号,L1(v)和L2(v)分别是:s到v的最短路径上v的前一个顶点;s到v的距离。对临时标号,L1(v)和L2(v)分别是:当前从s经过已永久标号的点到达v的最短路上v的前一个顶点;这条路径的长度。
【1】L(s) = (s, 0),L(v) = (s, +∞),v∈V – {s},i = 1。L(s)是永久标号,其余均为临时标号,u = s。
【2】对u邻接的临时标号的顶点v:
如果L2(u) + W(u, v) < L2(v),那么令L(v) = (u, L2(u) + W(u, v))。
【3】计算L2(t) = min{L2(v) | v∈V且有临时标号},把L(t)改为永久标号。
【4】如果i < n,那么令u = t,i = i + 1,返回到【2】继续。
计算完毕后,对每一个顶点u,都有d(s, u) = L2(u)。利用L1(v)从u开始回溯,查找从s到u的最短路径。

2.中国邮递员问题
邮递员从邮局出发,走遍负责街区投递邮件,最后回到邮局。问:如何走才能使他走的路最短?对应的图论模型是:给定一个带权无向图,所有边权均非负,求每一条边至少经过一次的最短回路。该问题由管梅谷于1962年首度提出,故称中国邮递员问题。

如果存在欧拉回路,那么任意一条欧拉回路都是正解,经过每一条欧拉回路走过的距离都是一样的,均为所有边的边权之和。
如果不存在欧拉回路,那么由于每一条边都会贡献两个度,图的总度数一定是偶数,所以奇度顶点的个数只能是偶数。那么,把奇度顶点每两个分一对,枚举全部组合,求出重复部分的最短距离,即令每一对奇度顶点中一个点到另一个点的最短距离之和最小,再加上原有的全部边的边权和即为答案。

3.货郎担问题(旅行商问题)
有n个城市,给定城市之间的道路长(为正无穷大时代表两个城市之间不连通)。一个旅行商从某城出发,要求仅经过每个城市一次,最后回到出发城市。问:如何走才能使他走的路线最短?
对应的图论模型是:设n阶完全带权图G(V, E, W),求G的一条最短的哈密顿回路。
该问题属于NP问题中的一个,目前没有找到有效的时间复杂度可以接受的算法求解。虽然可以采用动态规划求解,但其时间复杂度仍然是指数级的。

带权图上的三个问题--最短路问题、中国邮递员问题与货郎担问题相关推荐

  1. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  2. python无向带权图

    无向无权图见另一篇文章<python无向无权图结构>,这篇讲无向带权图,并且给出一个地铁线路例子. # -*- coding: UTF-8 -*- #!/usr/bin/python#-- ...

  3. 数据结构——图-有向带权图的邻接表

    #include <stdio.h> #include <stdlib.h> #define VertexType char //顶点的数据类型(char) #define V ...

  4. 数据结构——图-有向带权图的邻接表基础

    #include <stdio.h> #include <stdlib.h> #define VertexType char //顶点的数据类型(char) #define V ...

  5. 求的带权图最小生成树的Prim算法和Kruskal算法

    求的带权图最小生成树的Prim算法和Kruskal算法 最小生成树的概念 最小生成树其实是最小权重生成树的简称. 一个连通图可能有多个生成树.当图中的边具有权值时,总会有一个生成树的边的权值之和小于或 ...

  6. 邻接表实现的有向带权图 及 图算法(C++)

    邻接表实现的有向带权图 相关概念 声明和定义 实现 1. 构造函数 2. 析构函数 3. 深度优先遍历 4. 广度优先遍历 5. 获取顶点在邻接表中对应的下标 6. 添加顶点 7. 移除顶点 8. 添 ...

  7. HOJ 2739 The Chinese Postman Problem 带权有向图上的中国邮路问题

    [题目大意]  带权有向图上的中国邮路问题:一名邮递员需要经过每条有向边至少一次,最后回到出发点,一条边多次经过权值要累加,问最小总权值是多少.(2 <= N <= 100, 1 < ...

  8. 实现有向带权图抽象数据类型

    题目 图是一种使用广泛的数据结构.本次实验要求设计有向带权图的抽象数据类型,实现图的构造.顶点的增删查,边的增删改.深度优先遍历与广度优先遍历.单源最短路径.多源最短路径.判断图中是否存在负环. 效果 ...

  9. Java数据结构与算法:无向图,有向图,带权图,图的遍历,最小生成树

    文章目录 无向图 有向图 带权图 图的遍历 广度优先遍历 深度优先遍历 最小生成树 无向图 前面了解到树是有单一根结点的非线性结构,图(graph)也是一种非线性结构,其中的结点可以与许多其他的结点相 ...

  10. c语言图的无向网存储,C语言——无向带权图邻接矩阵的建立

    #include #include "Graph.h" #define MAX_INT 32767 /* #define vnum 20 #define MAX_INT = 327 ...

最新文章

  1. 如何在一个领域内成为顶尖人才?
  2. 速看!数智化人才热门岗位薪酬,最高可达100万!
  3. C++中的 smart pointer 四个智能指针
  4. RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
  5. 算法竞赛入门经典(第二版) | 例题4-2 刽子手游戏 (UVa489,Hangman Judge)
  6. CentOS7 升级Python2.x到3.x
  7. 搭建 Ruby 运行环境【Rails后端开发训练营】
  8. 小公司如何处理大订单
  9. JuiceFS 缓存策略详解
  10. 合唱队形(线性DP)
  11. ANN之乘积量化PQ
  12. JAVA高并发学习笔记(二) 多线程基础
  13. Spark 和hadoop的一些面试题(准备)
  14. 3dmax卡顿、卡死 怎么解决?
  15. Solidworks安装失败,出现内部错误:该产品组件的windows installer没按预期运
  16. 基于希克斯需求价格弹性计算_西方经济学(微观部分)计算题
  17. Netty自学-Netty学习(一)
  18. csu 1525: Algebraic Teamwork
  19. Oday安全 11.6利用加载模块之外的地址绕过SafeSEH一节注记---jmp [ebp+N] (下)
  20. 变频器被加密了,无法修改参数怎么办?(建议收藏备用,各个品牌)

热门文章

  1. 基于Dx11写一个自己的游戏引擎--1
  2. 金蝶kis商贸采购单商品代码_金蝶KIS云商贸版(采购模块)常见问题汇总
  3. 拉格朗日方程的三种推导方法之基于达朗贝尔原理推导
  4. 寻找“最好”(2)——欧拉-拉格朗日方程
  5. phper must-have
  6. 中关村-DIY操作系统之替换DV2804恢复分区中的wim镜像
  7. 主流反外挂技术的优缺点比较
  8. GRE蓝宝的核心词汇
  9. php面包屑导航实现思路,简单实现面包屑导航代码
  10. C#第九天面向对象的学习