matlab工具箱计算最小生成树_数学建模【图与网络模型(图的基本概念与数据结构、最短路-最小生成树-网络最大流问题、Matlab图论工具箱、渡河问题、钢管的订购与运输)】...

目   录

5.1 图的基本概念与数据结构

图与网络模型:建模中常用来描述的离散型模型。比如:交通问题、通讯问题、优化问题。

5.1.1 图的基本概念

 

哥尼斯堡七桥问题               A B C D 四个城市 ------ 不重复、不遗漏地一次走完七座桥,最后回到出发点。

18世纪初普鲁士的哥尼斯堡,有一条河穿过,河上有两个小岛,有七座桥把两个岛与河岸联系起来。有个人提出一个问题:一个步行者怎样才能不重复、不遗漏地一次走完七座桥,最后回到出发点。后来大数学家欧拉把它转化成一个几何问题——一笔画问题。他不仅解决了此问题,且给出了连通图可以一笔画的充要条件是:奇点的数目不是0 个就是2 个(连到一点的数目如是奇数条,就称为奇点,如果是偶数条就称为偶点,要想一笔画成,必须中间点均是偶点,也就是有来路必有另一条去路,奇点只可能在两端,因此任何图能一笔画成,奇点要么没有要么在两端)。

七桥所成之图形中,没有一点含有偶数条数,因此上述的任务无法完成。

图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。

1847年,德国物理学家克希霍夫为了给出电网络方程而引进了“树”的概念。哈密尔顿于1859年提出“周游世界”游戏,用图论的术语,就是如何找出一个连通图中的生成圈。近几十年来,由于计算机技术和科学的飞速发展,大大地促进了图论研究和应用,图论的理论和方法已经渗透到物理、化学、通讯科学、建筑学、运筹学、生物遗传学、心理学、经济学、社会学等学科中。

 边(弧,Edge)

节点:图中的点。         点集:节点的集合。         边集:边的集合。         e22:环         v1、v3:回路

既没有自环也没有平行边的图称为简单图(simple graph)。

在无向图中,与节点相关联边的数目,称为该节点的“度”(degree), 记为 d ;度数为奇数的点称为奇点(odd),度数为偶数的点称为偶点 (even) ;图中都是偶点的图称为偶图(even graph)。

可以 证明 任一图中 所有节点度数之和 为 边数的2倍。一条边,贡献两个度。

走过图中所有边且每条边仅走一次的闭和回路称为

定理 5.1.1:偶图一定存在欧拉回路(一笔画定理)。

无向图中,若任意两点间至少存在一条路径,则称为连通图,否则为 非连通图。

 《数据结构》、《离散数学》

5.1.2 图与网络的数据结构

1.邻接矩阵表示法

 弧:第3行 第4列;行:起点;列:终点

 无向图,对称矩阵

2.稀疏矩阵表示法

在Matlab中无向图和有向图邻接矩阵的使用上有很大差异。

对于有向图,只要写出邻接矩阵,直接使用Matlab的命令sparse命令,就可以把邻接矩阵转化为稀疏矩阵的表示方式。

对于无向图,由于邻接矩阵是对称阵,Matlab中只需使用邻接矩阵的下三角元素,即Matlab只存储邻接矩阵下三角元素中的非零元素。

稀疏矩阵只是一种存储格式。Matlab中,普通矩阵使用sparse命令变成稀疏矩阵,稀疏矩阵使用full命令变成普通矩阵。

5.2 最短路问题

图论常见问题:最短路问题、最小生成树问题、最大流问题。

5.2.1 问题描述

最短路问题就是从给定的网络图中找出一点到各点或任意两点之间距离最短的一条路。

有些问题,如选址、管道铺设时的选线、设备更新、投资、某些整数规划和动态规划的问题,也可以归结为求最短路的问题。

因此这类问题在生产实际中得到广泛应用。

例5.2.1 求c1到其他城市的最短路

设计城市c1到其他城市间的票价最便宜路线图

5.2.2 两指定顶点间的最短路径模型

 规划模型 优化问题 图模型问题

:0-1变量         最短路:min

:求所有边对应的权重         

:从i出发到j的标量

 :求和(从顶点1出发的所有边 减去 到达顶点1的所有边)(i=1)

迪杰斯特拉算法:先找到到临近节点的最短距离,然后一步步向远处延伸。

(1)初始步

(2)循环步

 顶点集V 去掉 

(3)i = |V| - 1   :V的度-1

例5.2.1 求c1到其他城市的最短路

(1)求c1到其他城市的最短边。w16=10,最短。c1到c6,距离最短,将c6纳入S1中。将c6并入S1中。目标:S1、S1补集之间最短路        c1到c2、c3、c4、c5;c6到c1到c2、c3、c4、c5

(2)c1到c5、c6到c2,距离最短(权重最小)。将c1、c2、c5、c6并入S中。

(3)c5到c4,距离最短。找S2到S2补之间的最短路,保证不重复,避免重复搜索。

(4)c4到c3,距离最短。

1号城市🏙:...

2号城市🏙:c16 -> c62:c1到c6 -> c6到c2【10+25=35】

3号城市🏙:c15 -> c54 -> c43【25+10+10=45】

4号城市🏙:c15 -> c54【25+10=35】

5号城市🏙:c15【25】

6号城市🏙:c16【10】

5.2.3 每对顶点间的最短路径

计算赋权图中各对顶点之间的对短路径,显然可以调用Dijkstra算法,即每次以不同顶点作为起点,反复执行n-1次这样的操作, 但这种算法比较费时。另一种解决该问题的方法是由R.W.Floyd提出的,称为Floyd算法。

 每执行一步,寻求任意两顶点之间的最短路径。

例5.2.1 求c1到其他城市的最短路

if a(i, j) > a(i, k) +a(k, j)   a(i, j) = a(i, k) +a(k, j):城市i到城市j,间接连线

a:任意两点之间的最短路径长度;path:经过的中间点

0 6 5 5 0 0:6表示---从c1到c2,中间要经过 点6。

% Floyd算法:

n=6; a=zeros(n); % 6*6的元素为0的初始矩阵

a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10; % 权值赋值

a(2,3)=15;a(2,4)=20;a(2,6)=25;           % 上三角矩阵

a(3,4)=10;a(3,5)=20;

a(4,5)=10;a(4,6)=25;

a(5,6)=55;

a=a+a'; % 转变为 对称邻接矩阵

a(a==0)=inf; % a中0元素,取值为∞

a([1:n+1:n^2])=

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值