VB求最短路径问题

作者&投稿:桑华 (若有异议请与网页底部的电邮联系)
怎样解决VB中这样的最短路径问题?~

这种问题一般都要使用智能算法,如遗传算法,蚁群算法等,才能找到最优解。

做出来了,代码如下,可能有点乱,但我测试可用
Private Function OrderXY(X() As Double, Y() As Double)
Dim i, j, k, m, n, num, temp As Double
Dim NewX() As Double
Dim NewY() As Double
Dim Smin As Double '定义最短总距离
If UBound(X()) UBound(Y()) Then MsgBox "坐标错误": Exit Function '防止数据错误
n = UBound(X())
ReDim p(n) As Long
p(0) = 0: num = 1
For i = 1 To n
p(i) = i 'p()数组依次存储从0到n共n+1个数
num = num * i '计算num,num表示的是n个坐标(除X(0),Y(0)以外)共有n!种排列
Next
ReDim Stance(num - 1) As Double '定义数组存储每种连接方法的总距离
ReDim NewX(n)
ReDim NewY(n)
For i = 0 To n - 1 'Stance(0)是按照原坐标顺序依次连接的总距离
Stance(0) = Stance(0) + Sqr((Y(i + 1) - Y(i)) * (Y(i + 1) - Y(i)) + (X(i + 1) - X(i)) * (X(i + 1) - X(i)))
Next
Smin = Stance(0)
For k = 0 To n
NewX(k) = X(k)
NewY(k) = Y(k)
Next
i = n - 1
'下面对p()数组的n个数(除0以外)进行排列,每产生一种排列方式,坐标数组的数据就对应交换,并计算这一路径的总距离
Do While i > 0
If p(i) < p(i + 1) Then
For j = n To i + 1 Step -1 '从排列右端开始
If p(i) <= p(j) Then Exit For '找出递减子序列
Next
temp = p(i): p(i) = p(j): p(j) = temp '将递减子序列前的数字与序列中比它大的第一个数交换
temp = X(i): X(i) = X(j): X(j) = temp '与之对应的X Y也交换
temp = Y(i): Y(i) = Y(j): Y(j) = temp
For j = n To 1 Step -1 '将这部分排列倒转
i = i + 1
If i >= j Then Exit For
temp = p(i): p(i) = p(j): p(j) = temp
temp = X(i): X(i) = X(j): X(j) = temp
temp = Y(i): Y(i) = Y(j): Y(j) = temp
Next
m = m + 1
For k = 0 To n - 1
Stance(m) = Stance(m) + Sqr((Y(k + 1) - Y(k)) * (Y(k + 1) - Y(k)) + (X(k + 1) - X(k)) * (X(k + 1) - X(k)))
Next

If Stance(m) <= Smin Then
Smin = Stance(m)
For k = 0 To n
NewX(k) = X(k): NewY(k) = Y(k)
Next
End If
i = n
End If
i = i - 1
Loop

For k = 0 To n
X(k) = NewX(k): Y(k) = NewY(k)
Next '此时的X() Y() 就按照最短路径排列

End Function

Function Min(x() as integer,y() as integer) as double

dim i,j,k,a
dim m() as double
dim s() as string
dim mins as string
redim m(ubound(x),ubound(x))
redim s(ubound(x),ubound(x))

for i=1 to ubound(x)-1 '从起始点0点到i点的距离
m(i,0)=((x(i)-x(0))^2+(y(i)-y(0))^2)^0.5
s(i,0)="0-" & cstr(i)
next

'从起始点开始经过K个点后到达i点的最短距离m(i,k),s为各点的连线如"0-3-2-1-4"
for k=1 to ubound(x)-2
for i=1 to ubound(x)-1
m(i,k)=10^307
for j=1 to ubound(x)-1
if instr(s(j,k-1),cstr(i))=0 then'避免重复走一点
a=((x(i)-x(j))^2+(y(i)-y(j))^2)^0.5
if a+m(j,k-1)<m(i,k) then
m(i,k)=a+m(j,k-1)
s(i,k)=s(j,k-1) & "-" & cstr(i)
endif
end if
next
next
next

'计算经过各点后到达最后一个点的最短距离
min=10^307
for j=1 to ubound(x)-1
a=((x(ubound(x))-x(j))^2+(y(ubound(x))-y(j))^2)^0.5
if a+m(j,ubound(x)-2)<min then
min=a+m(j,ubound(x)-2)
mins=s(j,ubound(x)-2) & "-" & cstr(ubound(x))
end if
next
msgbox "最短距离:" & min & vbcrlf & "最短路径:" & mins

End function

private sub Command1_Click
dim x(5) as integer
dim y(5) as integer
dim m as double
x(0)=0
y(0)=0
x(1)=40
y(1)=600
......
x(5)=1000
y(5)=1000
m=min(x,y)
End sub

这是蚂蚁路径吧。如果求长度很简单,一个一个连成直线就是了。如 P 点,Q 点,则距离为:
Sqrt((Px - Qx) ^ 2 + (Py - Qy) ^ 2)
这样你可以根据点的数量设置一个循环,将每个循环的新点与上次循环的末点求距离,累积起来就是最短路径。
这是 2008 的,6.0 的二次方好像叫 Sqr。


最短路径问题
回答:B点向l作对称点B‘ 再连AB‘交l于O点 则0点即为牛饮水点 A0与0B为最短回家

数学 一只蚂蚁从A点进过O点爬到B点 求最短路径
设圆柱高是h 半径是r 上圆面的圆心是I 角OIB=(2x)度 BO=2rsinx AO=(h^2+(pi-2x)*r)^(1\/2)AO+BO=2rsinx+(h^2+(pi-2x)*r)^(1\/2)-1\/2=(cos2x+1)(h^2+(pi-2x)*r)超越方程。你老师脑子进水了

网格中除中间的一个长方形外,其余均为正方形,则从A到B的最短路径为?
﹙竖线傍边的数字表示①经过该竖线到达B的最短路条数。﹚∴A过①到B的 最短路条数为1×28 条。同理 B过④到A的 最短路条数也为1×28 条。即A过④到B的 最短路条数为1×28 条。A到③最短路条数为3条。②到B有1+2+3+4+5+6=21条最短路 ∴A过②到B的 最短路条数为3×21 条...

...途经B(B1,B2,B3)C(C1,C2,C3)地,基于矩阵乘法求最短路径。给出...
因此由A到D的权矩阵为[5,8,7)][7,5;3,4;5,2]=[11 ,9]由A→E的权矩阵为:[11 ,9][4,2)]=[15,11]因此从家里到学校的最短距离为11百米,最近的路径为从A地出发经过B1地C1地D2地到达E地。下面我们给出基于“矩阵乘法”求解最短路的算法:第一阶段:计算出图中从起始点到...

一人从a点到河边再到b点,最短路径怎么画?
画a点关于河边对称的A点,然后链接对称点A和点b,会和河边有个交点O,再连接aOb,这就是最短距离,原理是三角形。

A到B有几条最短路径,用高二数学解释必攒
解:如图 从A到B共计6条路最短,这6条路路程相等。如下所示:A-C-D-E-G A-C-F-E-B A-C-F-M-B A-G-F-E-B A-G-F-M-B A-G-H-M-B

...先到草地边某一处牧马,再到河边饮马,然后到B处,请画出最短路径...
以草地为对称轴,做点A的对应点A',以河边为对称轴,作点B的对称点为点B',交草地边于点C交河面于点D,连接A‘B',那么A'C=AC,B'D=BD.所以AC+BD的距离最短(两点之间线段最短)所以AC+BD即为所求。我和你的书是一样的。哈哈。

...其中实线表示马路,从A走到B的最短路径有多少种?
要从A到B最短路径必须经过四横三纵。也就是说,要爬7步,我们只要确定七步中哪3步是纵的就是了。所以共有C(7,3)=35种最短的路径。

初二最短路径问题
延长AB至G,使AB=AG;延长AD至H,使AH=AD;连接GH 由∠B=∠D=90°,易得△ABE≌△GBE,△ADF≌△HDF 得AE=GE,AF=FH △AEF的周长=AE+EF+FA=GE+EF+FH其最小值就是GH的距离 此时GEFH四点共线,∠AEF=∠EAB+∠G=2∠EAB,同理∠AFE=2∠FAD ① 由于∠C=50°,∠B=∠D=90°...

数学初二最短路径问题
解:记河的两岸为l,l',将直线l平移到l'的位置,则点A平移到A',连接A'B交l'与D,过D作DC⊥l与C,则桥架在CD处就可以了.

乾安县13051069545: 求vb大神帮忙做最短路问题程序啊!!! -
除怡开同: Function Min(x() as integer,y() as integer) as doubledim i,j,k,a dim m() as doubledim s() as stringdim mins as stringredim m(ubound(x),ubound(x))redim s(ubound(x),u...

乾安县13051069545: 怎样解决VB中这样的最短路径问题? -
除怡开同: 这种问题一般都要使用智能算法,如遗传算法,蚁群算法等,才能找到最优解.

乾安县13051069545: VB 坐标最短路径
除怡开同: 做出来了,代码如下,可能有点乱,但我测试可用 Private Function OrderXY(X() As Double, Y() As Double) Dim i, j, k, m, n, num, temp As Double Dim NewX() As Double Dim NewY() As Double Dim Smin As Double '定义最短总距离 If UBound(X())...

乾安县13051069545: 谁有用A*算法做最短路径的VB代码 -
除怡开同: a*算法是什么算法,我只有Dijkstra算法的代码

乾安县13051069545: 最短路径算法 -
除怡开同: 原发布者:萨sky简述几种常用的最短路径算法摘要:随着社会的发展,最短路径问题在现实生活中占据的地位越来越重要.求解这一类问题的方法有很多,包括Floyd算法、Dijkstra算法、Bellman-Ford算法、动态规划算法和智能优化算法.其...

乾安县13051069545: 求最短路径一次经过的节点 -
除怡开同: 我曾经写过一个迷宫寻路的代码,和你说的解决方案很类似,结果也是可行的,不过2113我没用递归,就是用循环,根据我的经验,可以处理很大的数据量,所以几十个或是几百个结点不成问题. 定义一个二维数组,第一维表示步数,从1到理...

乾安县13051069545: 利用mapinfo+VB求最短路径问题 100分!!!
除怡开同: 先用diatra算法求得最短路径,把路径存在数组里,再用一个临时图层把路径信息写入一个MID文件力,再用MAPX把路径读出来,加我QQ吧

乾安县13051069545: 用VB或者MATLAB在一个矩形内生成一个固定点和几个随机点,再求出从固定点经过所有随机点回来后的最短路径 -
除怡开同: 这个并非一般的最短路径问题,而是旅行商问题(Traveling Saleman Problem,TSP).旅行商问题属于NP完全问题...

乾安县13051069545: 求VB长路径变成短路径(DOS版)的算法 -
除怡开同: 这个和那简单,根本不用你自己写代码,windows有自带的api函数 GetShortPathName,调用就行了,新建一个工程,试试我的代码,前提是你输入的那个地址一定要有那个文件,不能乱输 === Private Declare Function GetShortPathName Lib ...

乾安县13051069545: 用vb.net编写的floyd算法求两点间的最短路径,怎么输出path经过的顶点序列?
除怡开同: 用递归调用Sub Path(ByVal i As Integer, ByVal j As Integer) Dim k As Integer Dim x1, y1, x2, y2 As Integer k = s(i, j) If k = 0 Then Exit Sub End If Path(i, k) Path(k, j)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网