没有合适的资源?快使用搜索试试~ 我知道了~
首页最短路径算法源码 VB
最短路径算法源码 VB
需积分: 15 144 浏览量
更新于2023-03-16
评论 3
收藏 55KB DOC 举报
最短路径算法源码 VB 用于计算运筹学最短路问题 vbsheji
资源详情
资源评论
资源推荐

本例以由拓扑关系的 arc/info 文件为数据源。其中 a1,b1,c1 是以 fnode 排序生成的数组,a1 对应
fnode,b1 对应 tnode,c1 对应 length,同样 a2,b2,c2,是以 tnode 生成的数组。Indexa1 是对应某一起点
与其相连的终点的个数,indexb1 时对应某一终点与其相连的起点的个数,即其拓扑关系。
Public Function shortpath(startno As Integer, endno As Integer) As Single
以开始点,结束点为参数。
Dim result() As Single
Dim result1 As Integer
定义结果点

Dim s1 As Single
Dim min As Single
Dim ii, I, j, aa As Integer
Dim yc() As Boolean
Dim ycd() As Boolean
Dim rs1() As Single
Dim no() As Integer
Dim nopoint As Integer
ReDim yc(1 To maxno) As Boolean
ReDim ycd(1 To maxno) As Boolean
ReDim rs1(1 To maxno) As Single
ReDim result(1 To 2, 1 To maxno) As Single
定义结果,其中 result(1,maxno)为结果点,result(2,maxno)为结果长度。
For I = 1 To maxno// maxno 为网中最大的节点数。
Yc(i) = False //标记已经查过的点。
Ycd(i) = False //标记已经作结果点用过的点
rs1(i) = 1E+38 //假设从起点到任一点的距离都为无穷大
Next I
ll = startno //设置开始点。
Yc(ll) = True //标记开始点为真。即已经作结果点用过。

J = 0

For aa = 1 To maxno
先从与开始点相连的终点寻找
For I = 1 To indexa1(2, ll) //以与 ll 点相连的起点的个数循环
result1 = b1(indexa1(1, ll) - I + 1)找出与 LL 点相连的终点的点号

s1 = c1(indexa1(1, ll) - I + 1) + result(2, ll)找出长度并求和
If yc(result1) = True Then GoTo 200 如果以被经查过进行下一个
If ycd(result1) = True Then//如果已经作为结果点判断哪一个长
If rs1(result1) >= s1 Then//如果这一点到起点的长度比现在的路线长,替代
rs1(result1) = s1
result(1, result1) = ll//设置到这点的最短路径的前一点为 LL 点(精华部分)
result(2, result1) = s1 设置到这点的最短路径长度
GoTo 200
Else
GoTo 200
End If
End If
如果上面的条件都不符合则进行下面的语句
ycd(result1) = True
rs1(result1) = s1
result(1, result1) = ll
result(2, result1) = s1
每找到一个点加一,为了下面的判断
剩余43页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0