参考https://blog.youkuaiyun.com/kabuto_hui/article/details/82886826,在他的基础上改的
参数都一样,这个改了一下能算出两点之间所有的最短路,算复杂网络的时候用到的,算出的路由矩阵是cell,path给出一个每列记录一条路径,列数等于最短路数的矩阵,如果一个如果一条最短路经过的点较少,就会一直重复终点
function path=Path(r,m,n)
path(1,1)=m;
while any(path(end,:)~=n)
temp1=[];
temp2=[];
temp=[];
for i=1:size(path,2)
sl=r{path(end,i),n};
temp1=[temp1,sl(1)];
if size(sl,2)>1
temp2=[temp2,sl(2:end)];
for k=2:size(sl,2)
path=[path,path(:,i)];
end
end
end
temp=[temp1,temp2];
path=[path;temp];
end
end
function [d,r]=floyd(d)
n=size(d,1);
r=cell(n,n);
for i=1:n
for j=1:n
r{i,j}=[j];
end
end
for k=1:n
for i=1:n
if k==i
continue;
end
for j=1:n
if d(i,k)+d(k,j)<d(i,j)
d(i,j)=d(i,k)+d(k,j);
r{i,j}=r{i,k};
elseif d(i,k)+d(k,j)==d(i,j)&&d(i,k)~=inf&&d(k,j)~=inf
r{i,j}=Uni(r{i,j},r{i,k});
end
end
end
end
end
function a=Uni(a,b)
for i=1:length(b)
if ~(a==b(i))
a=[a,[b(i)]];
end
end
end