楼主: r小白新手
14230 9

[实际应用] 最短路径问题的经典算法——Floyd算法(r语言) [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2015-6-17
最后登录
2015-6-17

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大神,身为一个菜鸟只好发帖求助“最短路径问题的经典算法——Floyd算法” 捕.PNG


真的不懂啊,跪求指教

%Floyd算法
%
解决最短路径问题,是用来调用的函数头文件
%[D,path]=floyd(a)
%
输入参数a是求图的带权邻接矩阵,D(i,j)表示ij的最短距离,path(i,j)表示i,j之间最短路径上顶点i的后继点
%[D,path,min1,path1]=floyd(a,i,j)
%
输入参数a是所求图的带权邻接矩阵,i,j起点终点,min1表示ij最短距离,path1为最短路径
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

请将这个以matlab语言写成的算法改写为R语言的算法(函数),并调用编写好的函数命令求解如下的V1V7的最短路径问题:

[em34]拜托拜托



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:floyd R语言 terminal function Start function start 起点 经典

本帖被以下文库推荐

沙发
Doreen晨 发表于 2015-6-22 19:19:18 |只看作者 |坛友微信交流群
楼主!!你的帖有人回复吗?你发的这道题是我们运筹学期末上机作业,全班都不会做。。。你如果有答案的话能不能给我发一份,邮箱498597298@qq.com谢谢啦!!!好人一生平安!!!

使用道具

藤椅
平和_NCPPM 发表于 2015-6-23 20:24:10 |只看作者 |坛友微信交流群
查看igraph包中下列三个函数的程序脚本即可:
shortest.paths(graph, from, mode=c("all", "out", "in"),algorithm = c("automatic", "unweighted", "dijkstra", "bellman-ford", "johnson"))
get.shortest.paths(graph, from, to=V(graph), output=c("vpath", "epath", both"))
get.all.shortest.paths( )
average.path.length()
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

板凳
wuchm 发表于 2015-6-27 20:41:10 |只看作者 |坛友微信交流群
Doreen晨 发表于 2015-6-22 19:19
楼主!!你的帖有人回复吗?你发的这道题是我们运筹学期末上机作业,全班都不会做。。。你如果有答案的话能 ...
你们都把运筹和R结合起来用了?

使用道具

报纸
bonbona 发表于 2017-6-22 16:32:19 |只看作者 |坛友微信交流群
请问你最后做出来了吗?

使用道具

地板
星空superstar 发表于 2018-6-26 21:49:37 |只看作者 |坛友微信交流群
你们最后做出来了吗?可以分享一下吗?

使用道具

7
hifinecon 发表于 2018-6-26 22:24:28 |只看作者 |坛友微信交流群
good luck

使用道具

8
yyyyEcho 发表于 2018-6-27 20:33:52 来自手机 |只看作者 |坛友微信交流群
Doreen晨 发表于 2015-6-22 19:19
楼主!!你的帖有人回复吗?你发的这道题是我们运筹学期末上机作业,全班都不会做。。。你如果有答案的话能 ...
我们期末作业也是这个  你最后做出来了吗?真的不会呀

使用道具

9
学而好思 发表于 2019-8-12 12:22:09 |只看作者 |坛友微信交流群
####定义Floyd函数
floyd<-function(A){
  n<-nrow(A)
  D<-A
  path<-matrix(0,n,n)
  for(i in 1:n){
    for(j in 1:n){
      if(is.finite(D[i,j])==T){path[i,j]=j}
    }
  }
  for(k in 1:n){
    for(i in 1:n){
      for(j in 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]
        }
      }
    }
  }
  return(list(D=D,path=path))
}
####创建原始距离矩阵b
a<-matrix(0,7,7)
a[1,2]=3;a[1,3]=5;
a[2,3]=1;a[2,4]=5;a[2,5]=8;
a[3,4]=7;a[3,5]=4;a[3,6]=10;
a[4,5]=3;a[4,7]=6;
a[5,6]=1;a[5,7]=2;
a[6,7]=2
b<-a+t(a)
b[b==0]<-Inf

####调用函数求解

floyd(b)
结果如下:
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

10
zhou1_20 发表于 2019-8-12 14:13:03 来自手机 |只看作者 |坛友微信交流群
r小白新手 发表于 2015-6-17 23:25
各位大神,身为一个菜鸟只好发帖求助“最短路径问题的经典算法——Floyd算法”
真的不懂啊,跪求指教 ...
以前做过,你参考下<br>
https://mp.weixin.qq.com/s/mU6ZkynJ1jminKnZtzILBg
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 07:21