ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Matlab:数模05-图论模型(Floyd算法)

2021-05-04 13:57:14  阅读:150  来源: 互联网

标签:10 05 代码 Floyd 25 数模 Inf inf Matlab


文章目录

一个简单的例子

在这里插入图片描述
首行首列的0为城市1到城市1的费用,首行第二列的50为城市1到城市2的费用。以此类推。

Floyd算法简介

在这里插入图片描述

原理我们在文章“数模04”已经阐述过类似的了,接下来我们直接摆出Matlab代码进行编程。

Matlab代码

function [D,path,min1,path1]=floyd(a,start,terminal)
D=a;n=size(D,1);path=zeros(n,n);
for i=1:n
   for j=1:n
      if D(i,j)~=inf
         path(i,j)=j;
      end, 
   end,
end
for k=1:n
   for i=1:n
      for j=1:n
         if D(i,k)+D(k,j)<D(i,j)
            D(i,j)=D(i,k)+D(k,j);
            path(i,j)=path(i,k);
         end, 
      end, 
   end,
end
if nargin==3
   min1=D(start,terminal);
   m(1)=start;
   i=1;
   path1=[ ];   
   while   path(m(i),terminal)~=terminal
      k=i+1;                                
      m(k)=path(m(i),terminal);
      i=i+1;
   end
   m(i+1)=terminal;
   path1=m;
end 

我们先将以上代码保存命名为“floyd.m”,然后再新建一个脚本输入以下代码:

a= [ 0,50,inf,40,25,10;
     50,0,15,20,inf,25;
     inf,15,0,10,20,inf;
     40,20,10,0,10,25;
     25,inf,20,10,0,55;
     10,25,inf,25,55,0];
[D, path]=floyd(a)

可将其保存为“tulun1.m”。

修改时我们仅需修改tulun1.m内的代码中的变量a。

代码测试

在这里插入图片描述

在这里插入图片描述

我们可以再输入一组数据帮助理解:

[0 8 Inf Inf Inf Inf 7 8 Inf Inf Inf;
Inf 0 3 Inf Inf Inf Inf Inf Inf Inf Inf;
Inf Inf 0 5 6 Inf 5 Inf Inf Inf Inf;
Inf Inf Inf 0 1 Inf Inf Inf Inf Inf 12;
Inf Inf 6 Inf 0 2 Inf Inf Inf Inf 10;
Inf Inf Inf Inf 2 0 9 Inf 3 Inf Inf;
Inf Inf Inf Inf Inf 9 0 Inf Inf Inf Inf;
8 Inf Inf Inf Inf Inf Inf 0 9 Inf Inf;
Inf Inf Inf Inf 7 Inf Inf 9 0 2 Inf;
Inf Inf Inf Inf Inf Inf Inf Inf 2 0 2;
Inf Inf Inf Inf 10 Inf Inf Inf Inf Inf 0;];

要求:从v1到v11,找花费最少的路线。
在这里插入图片描述

针对这组数据,我们再运行dijstra算法:
在这里插入图片描述
在这里插入图片描述
正好是1,8,9,10,11。

因此,第一个例子便是这样:
在这里插入图片描述

标签:10,05,代码,Floyd,25,数模,Inf,inf,Matlab
来源: https://blog.csdn.net/weixin_51496152/article/details/116399825

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有