Matlab实现dijkstra
Posted 1623-1017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab实现dijkstra相关的知识,希望对你有一定的参考价值。
这次我第一次写博客,起了一个特别中二的名字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
操作系统已经凉了,fancyaboy去复习算法了o(╥﹏╥)o
以上是关于Matlab实现dijkstra的主要内容,如果未能解决你的问题,请参考以下文章