% 例如:
% 最短路径矩阵为
% p=
% 1 3 3 3 3
% 1 2 1 4 1
% 4 4 3 4 5
% 2 2 2 4 5
% 3 3 3 3 5
% i=4,j=3,即求点4到点3的最短路径:p(4,3) = 2(第4行第3列的值为2),表示4->3,先经过2,于是再看p(2,3) = 1,表示还需要再经过1,于是我们看p(1,3) = 3,这个时候我们发现终于到了3,所以我们梳理一下,4->3的最短路径是:4->2->1->3。简言之就是固定列,根据路由矩阵在行中跳转,直到跳转到对应的点。
% 计算点i到点j的最短路径链
% path_list 最短路径链列表
function [path_list]=path(p,i,j,path_list)
% 算出矩阵p的行数
% n=size(p,1)
% path_list=[]
% path_list(1)=i
% fprintf('i:%d j:%d',i,j)
% 将i添加到路径链列表path_list
path_list=[path_list i];
if i==j
% fprintf('i==j')
% path_list=[path_list j];
% return [path_list];
% [path_list];
% i和j相等,查找到路径最后一个点,不再继续查找
else
% fprintf('i~=j')
% return path(p,p(i,j),j,path_list);
% i和j相等,递归查找点p(i,j)和j之间路径链
path_list=path(p,p(i,j),j,path_list);
end