VB求最短路径问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 01:10:03
从A(0,0)到B(1000,1000)范围内有一些点(坐标均为整数)的集合P,其某个子集为Q,求从A到B并经过所有Q内的点的最短路径。

这应该是跟GIS相关的一个问题,求解题思路。

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 t