最短路径matlab计算机仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机仿真期末作业

姓名:吴隐奎 班级:04601 学号:041751 日期:2007-6-15

题目:Floyd 算法实现和分析

内容:用MATLAB 仿真工具实现Floyd 算法,求任意两端间的最短路径。 要求:尽可能用M 函数分别实现算法的关键部分,用M 脚本来进行算法结果验证;分别用以下两个图(用初始距离矩阵表示)进行算法验证:

图一:(0)0 100 100 1.2 9.2 100 0.5100 0 100 5 100 3.1 2100 100 0 100 100 4 1.51.2 5 100 0 6.7 100 1009.2 100 100 6.7 0 15.6 100100 3.1 4 100 15.6 0 1000.5 2 1.5 100 100 100 0]W ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦

图二:(0)

0 0.5 2 1.5 100 100 1000.5 0 100 100 1.2 9.2 1002 100 0 100 5 100 3.11.5 100 100 0 100 100 4100 1.2 5 100 0 6.7 100100 9.2 100 100 6.7 0 15.6100 100 3.1 4 100 15.6 0W ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦

算法:给定图G 及其边(,)i j 的权,(1,1)i j w i n j n ≤≤≤

≤ F0:初始化距离矩阵(0)W

和路由矩阵(0)R 。其中: (0)0ij ij ij ij w e E w e E i j ∈⎧⎪=∞∉⎨⎪=⎩ 若(有边) 若(无边)

若(对角线元素)

(0)(0)w 0,ij ij

j r ⎧≠∞=⎨⎩ 若 其它 F1:已求得(-1)k W 和(-1)k R ,依据下面的迭代求()k W 和()k R

()(1)(1)(-1),,,,min(,)k k k k i j i j i k k j w w w w --=+

(1)()(1),,,(),(1)()(1),,,k k k i k i j i j k i j k k k i j i j i j

r w w r r w w ----⎧<⎪=⎨=⎪⎩ 若 若 F2:若k

仿真:

用四个m 文件来实现仿真,其中main 为主函数,首先测试出矩阵的长度,然后赋给n ,作为循环的次数;然后调用func1实现路由矩阵的初始化,把第k-1次的值付给a 后,调用func2函数来迭代求出k 次的w 值,调用func3函数,根据a (实际上为k-1次w 值)值和k 次w 值来求出k 次r 值。迭代循环n 次。 主要程序:

n=length(w);

r=func1(w,n);

for k=1:n

a=w;

w=func2(w,n,k);

r=func3(a,w,r,n,k);

end;

Func1实现路由矩阵的初始化

主要程序

for i=1:1:n

for j=1:1:n

if x(i,j)==100

r0(i,j)=0;

else

r0(i,j)=j;

end,

end;

end;

Fuuc2该函数实现的功能是根据k-1次w 的值迭代求k 次w 的值

主要程序

for i=1:n

for j=1:n

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

end

end

Func3来根据k-1次w 值和k 次w 值的大小求k 次R 的值

主要程序:

for i=1:n

for j=1:n

if i==j

r(i,j)=0;

elseif w(i,j)

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

else

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

end

end

end

结果:

图一的结果:

w=

0 2.5000 2.0000 1.2000 7.9000 5.6000 0.5000

2.5000 0

3.5000 3.7000 10.4000 3.1000 2.0000

2.0000

3.5000 0 3.2000 9.9000

4.0000 1.5000

1.2000 3.7000 3.2000 0 6.7000 6.8000 1.7000

7.9000 10.4000 9.9000 6.7000 0 13.5000 8.4000

5.6000 3.1000 4.0000

6.8000 13.5000 0 5.1000

0.5000 2.0000 1.5000 1.7000 8.4000 5.1000 0

r=

0 7 7 4 4 7 7

7 0 7 7 7 6 7

7 7 0 7 7 6 7

1 1 1 0 5 1 1

4 4 4 4 0 4 4

2 2

3 2 2 0 2

1 2 3 1 1 2 0

可以看出:V4和V6之间最短距离是6.8,最短路由是V4—>V1—>V7—>V2—>V6 V3和V4之间最短距离是3.2,最短路由是V3—>V7—>V1—>V4

图二的结果:

w =

0 0.5000 2.0000 1.5000 1.7000 8.4000 5.1000

0.5000 0 2.5000 2.0000 1.2000 7.9000 5.6000

2.0000 2.5000 0

3.5000 3.7000 10.4000 3.1000

1.5000

2.0000

3.5000 0 3.2000 9.9000

4.0000

1.7000 1.2000 3.7000 3.2000 0 6.7000 6.8000

8.4000 7.9000 10.4000 9.9000 6.7000 0 13.5000

5.1000 5.6000 3.1000 4.0000

6.8000 13.5000 0

r =

0 2 3 4 2 2 3

1 0 1 1 5 5 1

1 1 0 1 1 1 7

1 1 1 0 1 1 7

相关文档
最新文档