數學模型演算法實現之Dijkstra演算法

2021-09-26 08:41:42 字數 2073 閱讀 5221

dijkstra演算法能求乙個頂點到另一頂點最短路徑。 它是由dijkstra於2023年提出的。實際它能求出初始點到其它所有頂點的最短路徑。

dijkstra演算法是一種標號法:給賦權圖的每乙個頂點記乙個數,稱為頂點的標號(臨時標號,稱t標 號,或者固定標號,稱為p標號)。t標號表示從始頂點到該標點的最短路長的上界;p標號則是從始頂點到該頂點的最短路長。

總結:可以看作從起點往終點逐步推進,然後選擇路徑

帶權鄰接矩陣:是表示頂點之間相鄰關係的矩陣(表示兩點間距離,inf表示不相鄰)

tulun1.m

weight= [0 2 8 1 inf inf inf inf inf inf inf;

2 0 6 inf 1 inf inf inf inf inf inf;

8 6 0 7 5 1 2 inf inf inf inf;

1 inf 7 0 inf inf 9 inf inf inf inf;

inf 1 5 inf 0 3 inf 2 9 inf inf;

inf inf 1 inf 3 0 4 inf 6 inf inf;

inf inf 2 9 inf 4 0 inf 3 1 inf;

inf inf inf inf 2 inf inf 0 7 inf 9;

inf inf inf inf 9 6 3 7 0 1 2;

inf inf inf inf inf inf 1 inf 1 0 4;

inf inf inf inf inf inf inf 9 2 4 0;];

[dis, path]=dijkstra(weight,1, 11)

dijkstra.m

function [min,path]=dijkstra(w,start,terminal)

n=size(w,1); label(start)=0; f(start)=start;

for i=1:n

if i~=start

label(i)=inf;

end, end

s(1)=start; u=start;

while length(s)(label(u)+w(u,v))

label(v)=(label(u)+w(u,v));

f(v)=u;

end,

end,

end

v1=0;

k=inf;

for i=1:n

ins=0;

for j=1:length(s)

if i==s(j)

ins=1;

end,

endif ins==0

v=i;

if k>label(v)

k=label(v); v1=v;

end,

end,

ends(length(s)+1)=v1;

u=v1;

endmin=label(terminal); path(1)=terminal;

i=1;

while path(i)~=start

path(i+1)=f(path(i));

i=i+1 ;

endpath(i)=start;

l=length(path);

path=path(l:-1:1);

數學模型演算法實現之種群競爭模型

fun.m function dx fun t,x,r1,r2,n1,n2,s1,s2 r1 1 r2 1 n1 100 n2 100 s1 0.5 s2 2 dx r1 x 1 1 x 1 n1 s1 x 2 n2 r2 x 2 1 s2 x 1 n1 x 2 n2 p3.m h 0.1 所取時間...

數學模型演算法實現之Lingo求解一

lingo基本用法說明 模型以model開始,end結束 集合相當於下標,quarters lingo中模型優化由四部分組成 1.集合段 定義集合變數及元素和屬性 sets endsets 2.目標與約束段 目標函式 約束條件 需要用到lingo內部函式如 sum和 for 3.資料段 對集合屬性輸...

數學模型演算法實現之Lingo求解二

這種最短路徑問題也可以用圖論 model sets cities s,a1,a2,a3,b1,b2,c1,c2,t l 定義城市集合,l i 為對應的屬性 s到城市i最短路徑 roads cities,cities a1,b1 a1,b2 a2,b1 a2,b2 a3,b1 a3,b2 b1,c1 ...