請參考:(10個點的最短路徑),源頂點編號為10,
!最短路問題;
model:
data:
n=10;
enddata
sets:
cities/1..n/:F;!10個城市;
roads(cities,cities)/
1,21,3
2,42,52,6
3,43,53,6
4,74,8
5,75,85,9
6,86,9
7,10
8,10
9,10
/:D,P;
endsets
D=
65
369
7511
91
875
410
5
7
9;
F(n)=0;
@for(cities(i)|i#lt#n:
F(i)=@min(roads(i,j):D(i,j)+F(j));
);
!顯然,如果P(i,j)=1,則點i到點n的最短路徑的第一步是i-->j,否則就不是。
由此,我們就可方便的確定出最短路徑;
@for(roads(i,j):
P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0)
end
結果是,
F(1)17.00000
F(2)11.00000
F(3)15.00000
F(4)8.000000
F(5)13.00000
F(6)11.00000
F(7)5.000000
F(8)7.000000
F(9)9.000000
F(10)0.000000
請參考:(10個點的最短路徑),源頂點編號為10,
!最短路問題;
model:
data:
n=10;
enddata
sets:
cities/1..n/:F;!10個城市;
roads(cities,cities)/
1,21,3
2,42,52,6
3,43,53,6
4,74,8
5,75,85,9
6,86,9
7,10
8,10
9,10
/:D,P;
endsets
data:
D=
65
369
7511
91
875
410
5
7
9;
enddata
F(n)=0;
@for(cities(i)|i#lt#n:
F(i)=@min(roads(i,j):D(i,j)+F(j));
);
!顯然,如果P(i,j)=1,則點i到點n的最短路徑的第一步是i-->j,否則就不是。
由此,我們就可方便的確定出最短路徑;
@for(roads(i,j):
P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0)
);
end
結果是,
F(1)17.00000
F(2)11.00000
F(3)15.00000
F(4)8.000000
F(5)13.00000
F(6)11.00000
F(7)5.000000
F(8)7.000000
F(9)9.000000
F(10)0.000000