Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx

上传人:b****2 文档编号:17668737 上传时间:2023-07-27 格式:DOCX 页数:14 大小:164.15KB
下载 相关 举报
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第1页
第1页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第2页
第2页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第3页
第3页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第4页
第4页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第5页
第5页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第6页
第6页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第7页
第7页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第8页
第8页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第9页
第9页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第10页
第10页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第11页
第11页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第12页
第12页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第13页
第13页 / 共14页
Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx

《Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx》由会员分享,可在线阅读,更多相关《Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx(14页珍藏版)》请在冰点文库上搜索。

Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告.docx

Floyd算法计算最短距离矩阵和路由矩阵查询最短距离和路由matlab实验报告

实验四:

Floyd算法

一、实验目的

利用MATLAB实现Floyd算法,可对输入的邻接距离矩阵计算图中任意两点间的最短距离矩阵和路由矩阵,且能查询任意两点间的最短距离和路由。

二、实验原理

Floyd算法适用于求解网络中的任意两点间的最短路径:

通过图的权值矩阵求出任意两点间的最短距离矩阵和路由矩阵。

优点是容易理解,可以算出任意两个节点之间最短距离的算法,且程序容易实现,缺点是复杂度达到,不适合计算大量数据。

Floyd算法可描述如下:

给定图G及其边(i,j)的权wi,j(1≤i≤n,1≤j≤n)

F0:

初始化距离矩阵W(0)和路由矩阵R(0)。

其中:

F1:

已求得W(k-1)和R(k-1),依据下面的迭代求W(k)和R(k)

F2:

若k≤n,重复F1;若k>n,终止。

三、实验内容

1、用MATLAB仿真工具实现Floyd算法:

给定图G及其边(i,j)的权

wi,j(1≤i≤n,1≤j≤n),求出其各个端点之间的最小距离以及路由。

(1)尽可能用M函数分别实现算法的关键部分,用M脚本来进行算法结

果验证;

(2)分别用以下两个初始距离矩阵表示的图进行算法验证:

分别求出W(7)和R(7)。

2、根据最短路由矩阵查询任意两点间的最短距离和路由

(1)最短距离可以从最短距离矩阵的ω(i,j)中直接得出;

(2)相应的路由则可以通过在路由矩阵中查找得出。

由于该程序中使用的是前向矩阵,因此在查找的过程中,路由矩阵中r(i,j)对应的值为Vi到Vj路由上的下一个端点,这样再代入r(r(i,j),j),可得到下下个端点,由此不断循环下去,即可找到最终的路由。

(3)对图1,分别以端点对V4和V6,V3和V4为例,求其最短距离和路由;对图2,分别以端点对V1和V7,V3和V5,V1和V6为例,求其最短距离和路由。

3、输入一邻接权值矩阵,求解最短距离和路由矩阵,及某些点间的最短路径。

四、采用的语言

MatLab

源代码:

【func1.m】

function[wr]=func1(w)

n=length(w);

x=w;

r=zeros(n,1);%路由矩阵的初始化

fori=1:

1:

n

forj=1:

1:

n

ifx(i,j)==inf

r(i,j)=0;

else

r(i,j)=j;

end,

end

end;

%迭代求出k次w值

fork=1:

n

a=w;

s=w;

fori=1:

n

forj=1:

n

w(i,j)=min(s(i,j),s(i,k)+s(k,j));

end

end

%根据k-1次值和k次w值求出k次r值

fori=1:

n

forj=1:

n

ifi==j

r(i,j)=0;

elseifw(i,j)

r(i,j)=r(i,k);

else

r(i,j)=r(i,j);

end

end

end

end;

【func2.m】

function[Pu]=func2(w,k1,k2)

n=length(w);

U=w;

m=1;

whilem<=n

fori=1:

n;

forj=1:

n;

ifU(i,j)>U(i,m)+U(m,j)

U(i,j)=U(i,m)+U(m,j);

end

end

end

m=m+1;

end

u=U(k1,k2);

P1=zeros(1,n);

k=1;

P1(k)=k2;

V=ones(1,n)*100;

kk=k2;

whilekk~=k1

fori=1:

n

V(1,i)=U(k1,kk)-w(i,kk);

ifV(1,i)==U(k1,i)

P1(k+1)=i;

kk=i;

k=k+1;

end

end

end

k=1;

wrow=find(P1~=0);

forj=length(wrow):

(-1):

1

P(k)=P1(wrow(j));

k=k+1;

end

P;

【m1.m】

w1=[01001001.29.21000.5;

100010051003.12;

100100010010041.5;

1.2510006.7100100;

9.21001006.7015.6100;

1003.1410015.60100;

0.521.51001001000];

w2=[00.521.5100100100;

0.501001001.29.2100;

2100010051003.1;

1.510010001001004;

1001.2510006.7100;

1009.21001006.7015.6;

1001003.1410015.60];

[W1R1]=func1(w1)

[W2R2]=func1(w2)

【m2.m】

w=input('输入权值矩阵w=');

k1=input('输入端点1:

k1=');

k2=input('输入端点2:

k2=');

w

[WR]=func1(w)

[Pu]=func2(w,k1,k2);

disp(['k1、k2间最短路:

',num2str(P)]);

disp(['k1、k2间最短距离:

',num2str(u)]);

五、数据结构

1.主要函数

最短距离、路由函数:

function[wr]=func1(w)

n=length(w);

x=w;

r=zeros(n,1);%路由矩阵的初始化

fori=1:

1:

n

forj=1:

1:

n

ifx(i,j)==100

r(i,j)=0;

else

r(i,j)=j;

end,

end

end;

%迭代求出k次w值

fork=1:

n

a=w;

s=w;

fori=1:

n

forj=1:

n

w(i,j)=min(s(i,j),s(i,k)+s(k,j));

end

end

%根据k-1次值和k次w值求出k次r值

fori=1:

n

forj=1:

n

ifi==j

r(i,j)=0;

elseifw(i,j)

r(i,j)=r(i,k);

else

r(i,j)=r(i,j);

end

end

end

end;

最短路径函数:

function[Pu]=func2(w,k1,k2)

n=length(w);

U=w;

m=1;

whilem<=n

fori=1:

n;

forj=1:

n;

ifU(i,j)>U(i,m)+U(m,j)

U(i,j)=U(i,m)+U(m,j);

end

end

end

m=m+1;

end

u=U(k1,k2);

P1=zeros(1,n);

k=1;

P1(k)=k2;

V=ones(1,n)*100;

kk=k2;

whilekk~=k1

fori=1:

n

V(1,i)=U(k1,kk)-w(i,kk);

ifV(1,i)==U(k1,i)

P1(k+1)=i;

kk=i;

k=k+1;

end

end

end

k=1;

wrow=find(P1~=0);

forj=length(wrow):

(-1):

1

P(k)=P1(wrow(j));

k=k+1;

end

P;

2.算法的流程图

Floyd算法:

六、实验结论与分析

通过上图可知,V4和V6之间最短距离是6.8,最短路由是V4—>V1—>V7—>V2—>V6,3和V4之间最短距离是3.2,最短路由是V3—>V7—>V1—>V4

通过上图可知,,点对V1和V7之间最短距离是5.1,最短路由是V1—>V3—>V7

端点对V3和V5之间最短距离是3.7,最短路由是V3—>V1—>V2—>V5

端点对V1和V6之间最短距离是8.4,最短路由是V1—>V2—>V5—>V6

七、遇到的问题及解决方法

(1)图的等价表示方法;

(2)两点间的最短路径查询算法。

八、实验心得

通过本次实验实现了用计算机语言编写Floys本掌握了算法的实现方法,对MatLab编程语言更加熟悉,培养了算法设计与优化能力。

此次实验我受益匪浅。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2