Matlab实现dijkstra

匿名 (未验证) 提交于 2019-12-03 00:34:01

  这次我第一次写博客,起了一个特别中二的名字fancyaboy_(:з」∠)_。

  fancyaboy还有三天就要考算法了,今晚在复习图算法的时候,突然想到以前打建模在网上没有找到能用的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

原文:https://www.cnblogs.com/1623-1017/p/9218892.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!