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 ...