数学建模解决两个顶点之间最短路径问题

本文主要使用LINGO程序,MATLAB可参考MATLAB解决

目录

无向图 

例题

代码

加和操作

有向图


无向图 

无向图是图论中的概念,用于描述一组对象之间的连接关系,其中边没有方向性。

在无向图中,对象通常表示为顶点(也称为节点或城市),而连接对象之间的关系则表示为边。边没有箭头或方向,因此可以在两个顶点之间双向传递。

无向图可以用数学符号表示为G = (V, E),其中 V 表示顶点的集合,E 表示边的集合。边的表示常用 (u, v) 或 {u, v} 表示,表示连接顶点 u 和 v。边的存在意味着两个相应的顶点之间存在连接关系。

例如,考虑一个简单的无向图表示四个城市 A、B、C 和 D。它们之间的连接可以表示为如下的顶点集和边集:

V = {A, B, C, D}
E = {(A, B), (A, C), (B, C), (C, D)}

在这个例子中,有四个顶点 A、B、C 和 D,它们之间存在四条边,表示各个城市之间的连接关系。

例题

例如,求v1到v11的最短路径

代码

 model:
sets:
cities/1..11/;
roads(cities,cities):w,x;
endsets
data:
w=0;
enddata
calc:
w(1,2)=2;w(1,3)=8;w(1,4)=1;
w(2,3)=6;w(2,5)=1;
w(3,4)=7;w(3,5)=5;w(3,6)=1;w(3,7)=2;
w(4,7)=9;
w(5,6)=3;w(5,8)=2;w(5,9)=9;
w(6,7)=4;w(6,9)=6;
w(7,9)=3;w(7,10)=1;
w(8,9)=7;w(8,11)=9;
w(9,10)=1;w(9,11)=2;w(10,11)=4;               !构造w矩阵
@for(roads(i,j):w(i,j)=w(i,j)+w(j,i));               !加和操作
@for(roads(i,j):w(i,j)=@if(w(i,j) #eq# 0, 1000,w(i,j)));       

  !设’M‘值,这里为1000,电脑会自动跳过这条路


endcalc
n=@size(cities);  !城市的个数;
min=@sum(roads:w*x);!权值乘以0-1变量
@for(cities(i)|i #ne#1 #and# i #ne# n:@sum(cities(j):x(i,j))=@sum(cities(j):x(j,i)));

!确保除起始城市和目标城市之外的所有城市都只能由一个道路进入和离开。


@sum(cities(j):x(1,j))=1;             !从城市1出发的路径只能选择一条
@sum(cities(j):x(j,1))=0;             !不能回到顶点1;!禁止回到城市1
@sum(cities(j):x(j,n))=1;             !最终目标城市n的路径只能选择一条
@for(roads:@bin(x));                  !0-1变量
 end

加和操作

对于无向图中的距离矩阵,通过"加和操作"指的是将对称位置上的元素进行相加的操作。

在距离矩阵中,由于无向图的特性,边的距离具有对称性。如果顶点i到顶点j的距离为d(i, j),那么顶点j到顶点i的距离必然也是d(j, i)。

为了确保距离矩阵的对称性,"加和操作"是指将距离矩阵中(i, j)位置的值与(j, i)位置的值进行相加,然后将结果更新到距离矩阵中。

具体而言,对于对称的距离矩阵,进行加和操作的形式可以表示为:

w(i, j) = w(i, j) + w(j, i)

其中,w(i, j)表示顶点i到顶点j的距离,w(j, i)表示顶点j到顶点i的距离。

通过进行加和操作,可以保持距离矩阵的对称性,确保边的距离在对称位置上是相等的。

这种操作通常用于在处理有向图的算法中,将无向图的距离矩阵与有向图的距离矩阵保持一致。对于只涉及无向图的算法,这种加和操作可能并不是必需的步骤,因为无向图的对称性已经保证了边的双向性。在该题中删去这一操作并不影响结果

有向图

有向图

可参考这篇文章解决问题,有向图无向图区别很明显,一看就能看出来,剩下的我在学学,后面再补充

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值