Floyd算法matlab程序问题
functionFloyd(w,router_direction,MAX)%x为此图的距离矩阵%router_direction为路由类型:0为前向路由;非0为回溯路由%...
function Floyd(w,router_direction,MAX) %x为此图的距离矩阵
%router_direction为路由类型:0为前向路由;非0为回溯路由
%MAX是数据输入时的∞的实际值
len=length(w);
flag=zeros(1,len); %根据路由类型初始化路由表
R=zeros(len,len);
for i=1:len
if router_direction==0%前向路由
R(:,i)=ones(len,1)*i;
else %回溯路由
R(i,:)=ones(len,1)*i;
end R(i,i)=0;
end
disp('');
disp('w(0)');
dispit(w,0);
disp('R(0)');
dispit(R,1); %处理端点有权的问题
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;
w(i,i)=0;
end
end %Floyd算法具体实现过程
for i=1:len
for j=1:len
if j==i || w(j,i)==MAX continue;
end for k=1:len if k==i || w(j,i)==MAX continue;
end if w(j,i)+w(i,k)<w(j,k) %Floyd算法核心代码
w(j,k)=w(j,i)+w(i,k);
if router_direction==0%前向路由
R(j,k)=R(j,i); else %回溯路由
R(j,k)=R(i,k);
end
end
end
end %显示每次的计算结果
disp(['w(',num2str(i),')']) dispit(w,0);
disp(['R(',num2str(i),')']) dispit(R,1);
end %中心和中点的确定
[Center,index]=min(max(w'));
disp(['中心是V',num2str(index)]);
[Middle,index]=min(sum(w'));
disp(['中点是V',num2str(index)]);
end
function dispit(x,flag) %x:需要显示的矩阵
%flag:为0时表示显示w矩阵,非0时表示显示R矩阵
len=length(x);
s=[];
for j=1:len
if flag==0
s=[s sprintf('%5.2f\t',x(j,:))];
else s=[s sprintf('%d\t',x(j,:))];
end s=[s sprintf('\n')];
end disp(s);
disp('---------------------------------------------------');
end
报错为:Error: File: D:\MATLAB7\work\Floyd.m Line: 1 Column: 40
麻烦高手帮忙看看是哪的问题! 展开
%router_direction为路由类型:0为前向路由;非0为回溯路由
%MAX是数据输入时的∞的实际值
len=length(w);
flag=zeros(1,len); %根据路由类型初始化路由表
R=zeros(len,len);
for i=1:len
if router_direction==0%前向路由
R(:,i)=ones(len,1)*i;
else %回溯路由
R(i,:)=ones(len,1)*i;
end R(i,i)=0;
end
disp('');
disp('w(0)');
dispit(w,0);
disp('R(0)');
dispit(R,1); %处理端点有权的问题
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;
w(i,i)=0;
end
end %Floyd算法具体实现过程
for i=1:len
for j=1:len
if j==i || w(j,i)==MAX continue;
end for k=1:len if k==i || w(j,i)==MAX continue;
end if w(j,i)+w(i,k)<w(j,k) %Floyd算法核心代码
w(j,k)=w(j,i)+w(i,k);
if router_direction==0%前向路由
R(j,k)=R(j,i); else %回溯路由
R(j,k)=R(i,k);
end
end
end
end %显示每次的计算结果
disp(['w(',num2str(i),')']) dispit(w,0);
disp(['R(',num2str(i),')']) dispit(R,1);
end %中心和中点的确定
[Center,index]=min(max(w'));
disp(['中心是V',num2str(index)]);
[Middle,index]=min(sum(w'));
disp(['中点是V',num2str(index)]);
end
function dispit(x,flag) %x:需要显示的矩阵
%flag:为0时表示显示w矩阵,非0时表示显示R矩阵
len=length(x);
s=[];
for j=1:len
if flag==0
s=[s sprintf('%5.2f\t',x(j,:))];
else s=[s sprintf('%d\t',x(j,:))];
end s=[s sprintf('\n')];
end disp(s);
disp('---------------------------------------------------');
end
报错为:Error: File: D:\MATLAB7\work\Floyd.m Line: 1 Column: 40
麻烦高手帮忙看看是哪的问题! 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询