- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图论模型简介
图论模型简介
一、图及其矩阵表示
1、起源:哥尼斯堡七桥问题:
欧拉为了解决这个问题,建立数学模型:陆地——点,桥——边,得到一个有四个“点”,七条“边”的“图”。问题转化为能否从任一点出发一笔画出七条边再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画判定法则:图是连通的,且每个顶点都与偶数条边相关联(这种图称为欧拉图)。由此可以得出结论:七桥问题无解。
2、基本概念:
图(graph):由顶点和边(又称线,边的两端必须是顶点)组成的一个结构。
邻接:一条边的两个端点称是邻接的;关联:边与其两端的顶点称是关联的。
无向图(graph):边无方向的图;有向图(digraph):边有方向的图。
路(path):由相邻边组成的序列,其中中间顶点互不相同。
圈(cycle):首、尾顶点相同的路,即闭路。
连通图(connected graph):图中任意两顶点间都存在路的图。
树(tree):无圈连通图
完全图(complete graph):任意两个顶点之间都有边相连的无向图,记为Kn。
竞赛图(tournament):由完全图给每条边定向而得到的有向图。
二部图(bipartite graph):图的顶点分成两部分,只有不同部分顶点之间才有边相连。
图G的子图H(subgraph):H是一个图,H的顶点(边)是图G的顶点(边)。
网络(Network):边上赋了权的有向图。
3、图的矩阵表示
无向图 有向图
4、著名的图论问题
例1 最短路问题(shortest path problem)
出租车司机要从城市甲地到乙地,在纵横交错的路中如何选择一条最短的路线?
例2 最小生成树问题(minimum-weight spanning tree problem)
为了给小山村的居民送电,每户立了一根电杆,怎样连接可使连线最短?
例3 中国邮递员问题(chinese postman problem)
一名邮递员负责投递某个街区的邮件。如何为他设计一条最短的投递路线?
(二部图的)最优匹配问题(optimum matching)
在赋权二部图中找一个权最大(最小)的匹配。
例5 旅行推销员问题(traveling salesman problem-TSP)
一名推销员准备前往若干城市推销产品。如何为他设计一条最短的旅行路线?
例6 网络流问题(network flow problem)
如何在一个有发点和收点的网络中确定具有最大容量的流。
二、求最短路的迪克斯特拉(Dijkstra)算法
基本思想是按距由近到远的顺序,依次确定到的各顶点的最短路和距离。为避免重复并保留每一步的计算信息,采用标号算法。
Dijkstra算法如下:
STEP1:,,,,;
STEP2:(), - , ,
计算,记达到这个最小值的一个顶点为,令;
STEP3:若,停止;否则,转STEP2。
例 求右图中从顶点u1到其它各
点的最短路及相应的路径.
求解过程列表如下:
顶点
前驱点
序号 1 2 3 4 5 6 7 8 1 1 6 1 2 5 3 5 1 0 ( ( ( ( ( ( ( 2 2 8 1 ( ( ( ( 3 2 8 ( ( 10 ( 4 8 3 ( 10 ( 5 8 6 10 12 6 7 10 12 7 9 12 8 12 例1 某公司在六个城市中有分公司,从到的直接航程票价记在下述矩阵的位置上。(表示无直接航路),请帮助该公司设计一张城市到其它城市间的票价最便宜的路线图。
解 第一个城市到其它城市的最短路径的Matlab程序如下:
clear;
clc;
M=10000;
a(1,:)=[0,50,M,40,25,10];
a(2,:)=[zeros(1,2),15,20,M,25];
a(3,:)=[zeros(1,3),10,20,M];
a(4,:)=[zeros(1,4),10,25];
a(5,:)=[zeros(1,5),55];
a(6,:)=zeros(1,6);
a=a+a;
pb(1:length(a))=0;pb(1)=1; % 永久标号点
index1=1; % 标记确定为永久标记的次序
index2=ones(1,length(a)); % 标记最短路上各点的先驱
文档评论(0)