图论最短路径问题 联系客服

发布时间 : 星期一 文章图论最短路径问题更新完毕开始阅读ef37e062657d27284b73f242336c1eb91b373359

信息与管理科学学院信息与计算科学系

课程论文

课程名称: 图与网络优化

论文名称: 图论最短路径问题在消防选址中的应用 姓 名: 武冬冬 班 级: 12级金数二班 指导教师: 王亚伟 学 号: 1210110057 实 验 室: 信息管理实验室 日 期: 2015.06.06

图论最短路径问题在消防选址中的应用

1210110057 武冬冬

【摘 要】 最短路问题是一类重要的优化问题,它不仅可以直接应用于解决生产实际中的许多问题,如管道铺设、线路安排、厂区布局、设备更新等,而且还经常作为一个基本工具,用于解决其他优化问题。本文介绍了图论最短路径问题及其算法,并应用图论最短路径问题的分析方法,解决城市消防站的选址问题。 【关键词】 最短路径;Dijkstra算法;消防选址

1 引言

图论是运筹学的一个重要分支,旨在解决离散型的优化问题,近年来发展十分迅速。在人们的社会实践中,图论已成为解决自然科学、工程技术、社会科学、生物技术以及经济、军事等领域中许多问题的有力工具之一。图论中的“图”,并不是通常意义下的几何图形或物体的形状图,也不是工程设计图中的“图”,而是以一种抽象的形式来表达一些确定的对象,以及这些对象之间具有或不具有某种特定关系的一个数学系统。也就是说,几何图形是表述

物体的形状和结构,图论中的“图”则描述一些特定的事物和这些事物之间的联系。它是数学中经常采用的抽象直观思维方法的典型代表。

2 图论基本概念

2.1 图的定义

有序三元组G?(V,E,?)称为一个图,其中:

(1)V?(V1,V2,?,Vn)是有穷非空集,称为顶点集,其元素叫做图的顶点; (2)E称为边集,其元素叫做图的边;

(3)?是从边集E到顶点集V的有序或者无序对集合的影射,称为关联函数。 2.2 图的分类

在图G中,与V中的有序偶(Vi,Vj)对应的边e称为图的有向边(或弧),而与

V中顶点的无序偶对应的边e称为图形的无向边,每一条边都是无向边的图,叫

做无向图,记为G?(V,E);每一条边都是有向边的图叫做有向图,记为

D?(V,E);既有无向边又有有向边的图叫做混合图。

2.3 权

如果图G中任意一条边(Vi,Vj)上都附有一个数Wij,则称这样的图G为赋权图,Wij称为边(Vi,Vj)上的权。

3 最短路径问题

最短路径问题是图论中的一个基本问题。在赋权图中,每条边都有一个数值(长度、成本、时间等),找出两节点之间总权和最小的路径就是最短路径问题。

最短路径问题,通常归属为三类:

(1)单源最短路径问题:包括确定起点的最短路径问题和确定终点的最短路径问题。确定终点与确定起点的最短路径问题相反,该问题是已知终点,求最短路径问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。

(2)确定起点终点的最短路径问题:即已知起点和终点,求两结点之间的最短路径。

(3)全局最短路径问题:求图中所有的最短路径。

4 最短路径算法

在赋权图中寻求最短路的算法通常有两种:Dijkstra算法和Floyd算法。 4.1 Dijkstra算法

当所有的权数Wij?0时,Dijkstra算法是目前公认的最好的算法。其基本思想是从起点v0出发,逐步向外发展。探索过程中,每到一个点,都记录下路径与路程,称为这个点的标号。故Dijkstra算法也称为标号法。

具体标号由两部分构成,第一部分是一个字母,表示前面的一个点的符号,说明从哪里来;第二部分是一个数字,表示从起点到目前位置的距离,说明有多远。标号被分成临时标号和永久标号两种。前者是可以修改的,后者是不变的。开始的时候,所有的标号都是临时标号,每一次算法循环,将其中的某一个临时标号改变为永久标号。因此,最多经过n?1次,可以求出从起点到终点的最短路径和路程。

Dijkstra的算法步骤为:设起点为v0,终点为vn。

(1)起点标号(一,0),邻点标号(v0,L(v0,v)),其他标号(v0,??)。令

V?V?v0。

(2)如果V??,终止算法。

(3)选择vk?V,具有最小标号L(vk)?min?L(vi)?。如果vk?vn,终止算法;

vi?V否则,将vk的标号改成永久标号,令V?V?vk。

(4)检查vk的邻点,如果L(vi)?L(vk)?L(vk?vi),则给vi标号

(vk,L(vi)?L(vk)?L(vk?vi))并返回步骤(2)。

4.2 Floyd算法

在某些问题中,需要确定图中任意两点之间的最短路径与路程。如采用Dijkstra算法求解,则须依次变换起点,重复执行算法n次才能得到所需结果,这显然过于繁琐。

Floyd算法可以借助于权矩阵直接求出任意两点之间的最短路径。

首先定义赋权图的权矩阵:D?[dij]n?n这里

??ij,当(vi,vj)?Edij?? 式中,wij表示(vi,vj)的权数。

??,否则Floyd的算法步骤:(1)令k?0,输人权矩阵D(0)?D。(2)令k?k?1,

(k?1)(k)(k?1)(k?1)(k?1)计算D(k)?(dij)n?n,k?1,2,?,n ,式中dij?min[dij,dik,dkj]。(3)如果

k?n,终止算法;否则,返回步骤(2)。

(n)(n)上述算法的最终结果D(n)?(dij就是从顶点vi到vj的最短路)n?n中元素dij程。如果希望计算结果不仅给出任意两点间的最短路程,而且给出具体的最短路径,则在运算过程中要保留下标的信息,即dik?dkj?dikj。