穿越沙漠代码出现已在此作用域内声明问题

%最短距离
function [dist,path,Distance] = dijkstra(A,start,dest)
tic
% 初始化操作
p = size(A,1); %计算顶点数目
S(1) = dest; %初始化集合S,已加入到路径中的顶点编号
U = 1:p; %初始化集合U,未加入到路径中的顶点编号
U(dest) = []; %删除终点编号
Distance = zeros(2,p); %初始化所有顶点到终点dest的距离
Distance(1,:) = 1:p;
Distance(2,1:p) = A(dest,1:p);
new_Distance = Distance;
D= Distance; %初始化U中所有顶点到终点dest的距离
D(:,dest) = [];
path = zeros(2,p); %初始化路径
path(1,:) = 1:p;
path(2,Distance(2,:)~=inf) = dest; %距离值不为无穷大时,将两顶点相连

% 寻找最短路径
while ~isempty(U) %判断U中元素是否为空
index = find(D(2,:)==min(D(2,:)),1); %剩余顶点中距离最小值的索引
k = D(1,index); %发现剩余顶点中距离终点最近的顶点编号

%更新顶点
S = [S,k];     %将顶点k添加到S中
U(U==k) = [];  %从U中删除顶点k  

%计算距离
new_Distance(2,:) = A(k,1:p)+Distance(2,k);  %计算先通过结点k,再从k到达终点的所有点距离值
D = min(Distance,new_Distance);  %与原来的距离值比较,取最小值  

%更新路径
path(2,D(2,:)~=Distance(2,:)) = k;  %出现新的最小值,更改连接关系,连接到结点k上 

%更新距离
Distance = D;  %更新距离表为所有点到终点的最小值
D(:,S) = [];   %删除已加入到S中的顶点

end
dist = Distance(2,start); %取出指定起点到终点的距离值
toc %计时结束

% 输出结果
fprintf('找到的最短路径为:');
while start = dest %到达终点时结束
fprintf('%d-->',start); %打印当前点编号
next = path(2,start); %与当前点相连的下一顶点
start = next; %更新当前点
end
fprintf('%d\n',dest);
fprintf('最短路径对应的距离为:%d\n',dist);
end
%最短距离
function [dist,path,Distance] = dijkstra(A,start,dest)
tic
% 初始化操作
p = size(A,1); %计算顶点数目
S(1) = dest; %初始化集合S,已加入到路径中的顶点编号
U = 1:p; %初始化集合U,未加入到路径中的顶点编号
U(dest) = []; %删除终点编号
Distance = zeros(2,p); %初始化所有顶点到终点dest的距离
Distance(1,:) = 1:p;
Distance(2,1:p) = A(dest,1:p);
new_Distance = Distance;
D= Distance; %初始化U中所有顶点到终点dest的距离
D(:,dest) = [];
path = zeros(2,p); %初始化路径
path(1,:) = 1:p;
path(2,Distance(2,:)
=inf) = dest; %距离值不为无穷大时,将两顶点相连

% 寻找最短路径
while ~isempty(U) %判断U中元素是否为空
index = find(D(2,:)==min(D(2,:)),1); %剩余顶点中距离最小值的索引
k = D(1,index); %发现剩余顶点中距离终点最近的顶点编号

%更新顶点
S = [S,k];     %将顶点k添加到S中
U(U==k) = [];  %从U中删除顶点k  

%计算距离
new_Distance(2,:) = A(k,1:p)+Distance(2,k);  %计算先通过结点k,再从k到达终点的所有点距离值
D = min(Distance,new_Distance);  %与原来的距离值比较,取最小值  

%更新路径
path(2,D(2,:)~=Distance(2,:)) = k;  %出现新的最小值,更改连接关系,连接到结点k上 

%更新距离
Distance = D;  %更新距离表为所有点到终点的最小值
D(:,S) = [];   %删除已加入到S中的顶点

end
dist = Distance(2,start); %取出指定起点到终点的距离值
toc %计时结束

% 输出结果
fprintf('找到的最短路径为:');
while start ~= dest %到达终点时结束
fprintf('%d-->',start); %打印当前点编号
next = path(2,start); %与当前点相连的下一顶点
start = next; %更新当前点
end
fprintf('%d\n',dest);
fprintf('最短路径对应的距离为:%d\n',dist);
end

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。