function [path, totalCost] = dijkstra_wu(n, netCostMatrix, s, d) % path: the list of nodes in the path from source to destination; % totalCost: the total cost of the path; % farthestNode: the farthest node to reach for each node after performing % the routing; % n: the number of nodes in the network; % s: source node index; % d: destination node index; % all the nodes are un-visited; visited(1:n) = 0; distance(1:n) = inf; % it stores the shortest distance between each node and the source node; parent(1:n) = 0; distance(s) = 0; for i = 1:(n-1), temp = []; for h = 1:n, if visited(h) == 0 % in the tree; temp=[temp distance(h)]; else temp=[temp inf]; end end; [t, u] = min(temp); % it starts from node with the shortest distance to the source; visited(u) = 1; % mark it as visited; for v = 1:n, % for each neighbors of node u; if ( ( netCostMatrix(u, v) + distance(u)) < distance(v) ) distance(v) = distance(u) + netCostMatrix(u, v); % update the shortest distance when a shorter path is found; parent(v) = u; % update its parent; end; end; end; % after this, we only found the distance from source to every other node % and no path found yet, but the tree-relationship us established in % "parent" path = []; if parent(d) ~= 0 % if there is a path! t = d; path = [d]; while t ~= s p = parent(t); path = [p path]; t = p; end; end; totalCost = distance(d); return;