找到这段代码的问题function [dist,path] = dijkstra(D,s,t) % G:邻接矩阵,s:起点,t:终点 % dist:s到所有点的最短距离,path:s到t的最短路径 n = size(D, 1); dist = inf(1,n); % 到各点的距离 path = zeros(1,n); % 到各点的路径 S = false(1,n); % 是否已经找到最短路径 dist(s) = 0; for i = 1 : n minDist = inf; u = -1; % 找到当前未找到最短路径的点中距离最近的点 for j = 1 : n if ~S(j) && dist(j) < minDist minDist = dist(j); u = j; end end if u == -1 || u == t break; end % 标记已经找到最短路径 S(u) = true; % 更新其它点到起点的距离 for j = 1 : n if ~S(j) && D(u,j)~=inf && dist(j) > dist(u) + D(u,j) dist(j) = dist(u) + D(u,j); path(j) = u; end end end % 构建路径 if path(t) == 0 path = []; else pathNodes = t; while path(pathNodes) ~= s pathNodes = [path(pathNodes), path(pathNodes)]; end path = [s, pathNodes, t]; end end
时间: 2024-02-15 14:29:07 浏览: 83
Dist-Zilla-App-Command-regenerate:从发布阶段将内容写入源代码树
这段代码存在一个问题:在构建路径的时候,当 path(t) 不等于 0 时,pathNodes 的初始化值应该为 t,而不是 [t]。因为 pathNodes 后面会被赋值为 path(pathNodes),如果 path(t) 不等于 0,path(t) 所在的位置会被赋值为 s,导致 pathNodes 的值为 [t, s],最终得到的路径会包含重复的节点。
阅读全文