请输入您要查询的百科知识:

 

词条 主成分分析程序
释义

function Dijkstra(w,start,MAX)

%w为此图的距离矩阵

%start为起始端点下标(从1开始)

%MAX是数据输入时的∞的实际值

%2011年6月19日17:02:03

len=length(w);

flag=zeros(len,2);

index=zeros(1,len);

index(1)=start;

%根据路由类型初始化路由表

R=ones(len,2)*MAX;

R(1,1)=0;

R(1,2)=start;

port=zeros(1,len);

port(start)=0;

%处理端点有权的问题

for i=1:len

tmp=w(i,i)/2;

if tmp~=0

w(i,:)=w(i,:)+tmp;

w(:,i)=w(:,i)+tmp;

flag(i,1)=1; %表示端i点有权值

flag(i,2)=tmp; %存储端点权值的一半

end

w(i,i)=MAX;

end

s=sprintf('\\tv%d',1:len);

s_tmp=sprintf('\\t|%s\\t%s\\t',' 置定端',' 距离');

s=strcat(s,s_tmp);

s_tmp=sprintf('%s\\t',' 路由 ');

s=strcat(s,s_tmp);

s_tmp=sprintf('\----------------------------------------------------\\\t0');

s=strcat(s,s_tmp);

for i=1:len-1

s_tmp=sprintf('\\t∞');

s=strcat(s,s_tmp);

end

s_tmp=sprintf('\\t|\\t%d\\t%4.1f\\t%d',start,0,start);

s=strcat(s,s_tmp);

disp(s);

%Dijkstra算法具体实现过程

count=1;

while count<len

s='';

N=MAX; %暂存每次距离比较的较大值

x=1; %暂存每次距离比较的较大值的下标

for i=1:len

if isempty(find(index==i,1)) %将没有在置定点的i值跳过

continue

end

for j=1:len

if ~isempty(find(index==j,1)) %将在置定点的j值跳过

continue

else

port(j)=R(i,1)+w(i,j); %新距离

end

if port(j)<R(j,1) %新旧路由距离比较,如果小,则更新

R(j,1)=port(j);

R(j,2)=i;

else

port(j)=R(j,1);

end

if port(j)<N %通过比较,得出一次循环中,最小的距离,将相应点置定

N=port(j);

x=j;

end

end

end

for k=1:len %输出格式设置(考虑端权值)

if isempty(find(index==k,1))

if port(k)==MAX

s_tmp=sprintf('\\t%s','∞');

else

if flag(k,1)

port(k)=port(k)-flag(k,2);

end

s_tmp=sprintf('\\t%2.1f',port(k));

end

else

s_tmp=sprintf('\\t%s','_');

end

s=strcat(s,s_tmp);

end

if flag(x,1)

R(x,1)=R(x,1)-flag(x,2);

end

s_tmp=sprintf('\\t|\\t%d\\t%4.1f\\t%d',x,R(x,1),R(x,2));

s=strcat(s,s_tmp);

disp(s);

%为下次的循环设置条件——更新置定点列表+count加1

count=count+1;

index(count)=x;

end

end

示例:

输入:

b=[

0,9.2,1.1,3.5,100,100;

1.3,0,4.7,100,7.2,100;

2.5,100,0,100,1.8,100;

100,100,5.3,0,2.4,7.5;

100,6.4,2.2,8.9,0,5.1;

7.7,100,2.7,100,2.1,0

];

Dijkstra(b,1,100

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 17:11:04