%floyd.m
function [D,R]= floydwarshall(A)
% %采用floyd算法计算图中任意两点之间最短路程,可以有负权。
%参数D为连通图的权矩阵
%R是路由矩阵
D=A; n=length(D); %赋初值
for(i=1:n)for(j=1:n)R(i,j)=j;end;end %赋路径初值
for(k=1:n)
for(i=1:n)
for(j=1:n)
if(D(i,k)+D(k,j)
k; %显示迭代步数
D; %显示每步迭代后的路长
R; %显示每步迭代后的路径
pd=0;for i=1:n %含有负权时
if(D(i,i)<0)pd=1;break;end;end %跳出内层的for循环 存在一条含有顶点vi的负回路
if(pd==1) fprintf('有负回路');break;end %存在一条负回路, 跳出最外层循环 终止程序
end %程序结束
dij matlab算法
function [d,path]=dijkstra(W,s,t)
[n,m]=size(W);ix=(W==0);W(ix)=inf;
if(n~=m),error('Square W requred');end
visited(1:n)=0;dist(1:n)=inf;parent(1:n)=0;dist(s)=0;d=inf;
for i=1:(n-1),
ix=(visited==0);vec(1:n)=inf;vec(ix)=dist(ix);
[a,u]=min(vec);visited(u)=1;
for v=1:n,if(W(u,v)+dist(u)
end;end;end;
if(parent(t)~=0),path=t;d=dist(t);
while(t~=s),p=parent(t);path=[p path];t=p;end;
end;