Matlab實現dijkstra


  這次我第一次寫博客.......

  還有三天就要考算法了,今晚在復習圖算法的時候,突然想到以前打建模在網上沒有找到能用的dijkstra算法的matlab代碼。

  就當做是復習,今晚寫了一個matlab版的dijkstra。

  因為覺得matlab實現堆比較麻煩,就直接用sort來實現最小堆了,不喜忽噴_(:з」∠)_

  代碼如下

function [load, w] = dijkstra(Matrix, src, dst)
Matrix(isnan(Matrix)) = inf;
N = size(Matrix, 1);
d = zeros(1, N);
pred = zeros(1, N);
for i = 1:N
   d(i) = inf; 
   color(i) = 'W';
end
d(src) = 0;
pred(src) = 0;
[~, index] = sort(d);
temp = repmat('B', 1, length(d));
while(~strcmp(color, temp))
    for j = 1:length(d)
        if color(index(j)) == 'W'
            u = index(j);
            break;
        end
    end
    index(j) = [];
    for  i = 1:length(index)
        v = index(i);
        if color(v) == 'B'
            continue;
        end
        if d(u) + Matrix(u, v) < d(v)
            d(v) = d(u) + Matrix(u, v);
            pred(v) = u;
        end
    end
    [~, index] = sort(d);
    color(u) = 'B';
end
w = d(dst);
i = dst;
j = 2;
Rload(1) = dst;
while(pred(i) ~= src)
    Rload(j) = pred(i);
    i = pred(i);
    j = j+1;
end
Rload(j) = pred(i);
N = size(Rload, 2);
for i = 1:N
    load(i) = Rload(N-i+1);
end

  操作系統已經涼了,去復習算法了o(╥﹏╥)o


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM