Error: Error using ==> feval Undefined function or method 'edit6_Callback' for input arguments of type 'struct'.
7 views (last 30 days)
Show older comments
function [sequenceOfSPFLinkIds,sequenceOfSPFNodeIds , totalCost] = libraryGraph_capacityShortestPath (linkTable , ingressNode , egressNode , minimumCapacityInEachLink)
numberNetNodes = max (max (linkTable(:,1:2))); numberNetNodes = max ([numberNetNodes ingressNode egressNode]); numberlinkTable = size (linkTable , 1);
intree = zeros (1,numberNetNodes); predLinkIds = -1 * ones (1,numberNetNodes); % the link which takes me to the ingress weightTagsPerNode = inf * ones (1,numberNetNodes); weightTagsPerNode (ingressNode) = 0;
counterOfSteps = 0;
warning ('off' , 'MATLAB:divideByZero');
while (intree (egressNode) ~= 1) && (counterOfSteps <= numberNetNodes) counterOfSteps = counterOfSteps + 1;
for cont=1:length(weightTagsPerNode)
end
% to calculate the node id with lowest tag, only among the ones in the tree
[auxiliar,newNodeIdInTree] = min (weightTagsPerNode ./ (1-intree));
% If the node with lowest tag has an infinite value => nodes not in
% the tree are not connected to the component of the ingress node, and we should stop
if (isinf (weightTagsPerNode(newNodeIdInTree)))
break;
end
intree (newNodeIdInTree) = 1;
outgoingLinksFromNewNodeInTree = find (linkTable(:,1)==newNodeIdInTree);
for outLinkId=outgoingLinksFromNewNodeInTree'
neighbour = linkTable(outLinkId,2);
if (intree (neighbour) == 0)
if (weightTagsPerNode (neighbour) > weightTagsPerNode (newNodeIdInTree) + linkTable (outLinkId,3)) && (linkTable(outLinkId,4) >= minimumCapacityInEachLink)
weightTagsPerNode (neighbour) = weightTagsPerNode (newNodeIdInTree) + linkTable (outLinkId,3);
predLinkIds (neighbour) = outLinkId;
end
end
end
end
% convert the pred structure into a sequence of links sequenceOfLinkIds = []; sequenceOfSPFLinkIds = []; sequenceOfSPFNodeIds = [];
% si el destino no esta en intree es que no habia camino totalCost = 0; if (intree (egressNode) == 1) node = egressNode; sequenceOfSPFNodeIds = [egressNode]; while (node ~= ingressNode) linkToAdd = linkTable (predLinkIds(node),:); totalCost = totalCost + linkToAdd(3); sequenceOfSPFLinkIds = [predLinkIds(node) sequenceOfSPFLinkIds]; node = linkToAdd (1); % source of the link added sequenceOfSPFNodeIds = [node sequenceOfSPFNodeIds]; end end
warning ('on' , 'MATLAB:divideByZero');
0 Comments
Answers (0)
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!