function [distance,path]=zuiduanlujing(D,start1,terminal);
%求带便函数权值的最短路径
%嵌套调用函数
[B,F]=datainfun;    %获得路段距离和公路铁路性质数据数据
for k=1:7
    39+k
    for t=1:15
start1=39+k;
terminal=t;
D=B;    % 赋值
%function [d,EE]=dijkstra(D,start1,end)
[m,n]=size(D);
path=[];
d=inf.*ones(1,m);
d(1,start1)=0;   %用以标记此刻各顶点离集合距离,初始为inf
dd=zeros(1,m);  %标记顶点集合,初始为零
dd(1,start1)=1;  
ind=zeros(1,m);   %给逆向路径数组
y=start1;
length1=zeros(1,m);  %定义初始的各位置的路径长度(包含运输费用的计算)
%DD=zeros(m,m);
%DD(y,y)=1;
time=0;
while length(find(dd==1))<m  %当集合未包含所有的顶点时
    for i=1:m   %以y为起始点时更新d(i)
        if dd(i)==0  
            temp=length1(i);   %记录此长度值
            if(F(y,i)==1)
                length1(i)=length1(y)+B(y,i); %计算长度
            else
                length1(i)=0;    %铁路运输结束
            end
            t=d(i); %标记记录
            % volum=(d(y)-fun(length(y))); %就算公路段前的运输费
            d(i)=min(d(i),fun(length1(i)).*F(y,i)+(d(y)-fun(length1(y))*F(y,i))+D(y,i)*~F(y,i));  %更新tag,包含多方面
            if(t>d(i))  %若变化后d(i)值小于原来值
                ind(i)=y;   %最短路径的前一节点 
            else
                length1(i)=temp;    %恢复长度
            end
        end
    end
    ddd=inf;
    for i=1:m
        if dd(i)==0&&d(i)<ddd  %需要记录所有值
            ddd=d(i);   %有多个点时,取最后一个
            yy=i;
        end
    end
    %yy=find(d==ddd);    %找到这样点的坐标
   % counter=counter+1;
    %DD(y,yy(1,1))=counter;
    %DD(yy(1,1),y)=counter;
    y=yy;
    dd(1,y)=1;

end
here1=terminal;
    while 1 %用于输出路径
        path(end+1)=terminal;
    if ind(terminal)~=0
        terminal=ind(terminal);
    else
        break;
    end
    end
    path=fliplr(path);   %正序输出最短路径
    
    distance=d(here1)
    end
end
end

求带便函数权值的最短路径相关推荐

  1. matlab计算绝对值的导数,如何用matlab求带绝对值函数的导数? 你值得一看的技巧...

    用matlab求函数的导数:如果一个函数表达式中有绝对值,那对该函数求导就需要注意啦!该函数可能在他的零点处导数不存在,所以我们不能用传统的方法求导,应该在零点处分别求左导数和右导数,如果左导数和右导 ...

  2. JS学习之求带参函数求任意两个数和

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>带参函 ...

  3. (dijkstra算法+多权值)最短路径问题

    给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input 输入n,m,点的编号是1~n,然后是m ...

  4. 图算法:2、计算带有负权值的单源最短路径:Bellman-Ford算法

    原文地址:http://www.wutianqi.com/?p=1912 相关文章: 1.Dijkstra算法: http://www.wutianqi.com/?p=1890 2.Floyd算法: ...

  5. P1351 联合权值[鬼畜解法]

    题目描述 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi​,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v 点的最短距离 ...

  6. c语言 编写一个求圆面积的函数area,该函数有一个形式参数r,c语言编写一个求圆面积的函数area,有形参,类型为float...

    用c语言编写函数,求圆的周长和面积,用函数.急求. #include#definePI3.1415926doublearea(doubler){returnPI*r*r;}doubleperimete ...

  7. 图论算法(三)--最短路径 的Bellman-Flod [ 带负权值图 ] 的解法(JAVA )

    Bellman-Flod算法 对于带有负权值的图,我们已经不能通过Dijkstra算法进行求解了 原因:Dijkstra每次都会找一个距源点(设为s)最近的点,然后将该距离定为这个点到源点的最短路径: ...

  8. 【BZOJ4129】Haruna’s Breakfast,树上带修莫队+权值分块求mex

    Time:2016.09.08 Author:xiaoyimi 转载注明出处谢谢 思路: 这道题相当于把昨天学的树上莫队和带修莫队融合了一下,顺便加了一个mex(未出现的最小自然数) 那么主要问题就是 ...

  9. 带权值的斐波那契数列函数的曲线形态

    带权值的斐波那契数列函数 f ( n ) = a ∗ f ( n − 1 ) + b ∗ f ( n − 2 ) f(n) = a*f(n-1) + b*f(n-2) f(n)=a∗f(n−1)+b∗ ...

最新文章

  1. php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用
  2. 如何选择最优路径完成云原生上云?听这场阿里云特别分享【云原生技术与最佳实践】
  3. 详解静态路由(入门类)
  4. 利用SecureCRT在linux与Windows之间传输文件
  5. burpsuite小米手机抓包_使用burpsuite实现Android APP的HTTPS抓包
  6. 草稿selenium显示等待
  7. 分享一个VS2013代码窗口一闪而过的解决方案。
  8. InvalidClassException
  9. 洛谷 P1400 塔
  10. oracle 主要语句大荟萃
  11. VUE3中使用粒子特效
  12. BC26低功耗的OPENCPU代码注意事项
  13. Processing 入门基础【秒懂小白篇】
  14. 仿豆果美食tableview的展开和收缩效果
  15. 计算机专业的浪漫情话,计算机科学与技术表白情话
  16. Cygwin使用介绍
  17. Linux系统的信号详解
  18. 全国计算机设计大赛贴吧,2019继续教育学院精彩时刻——大赛篇
  19. EtherCAT总线介绍及从站硬件设计
  20. bzoj2121 字符串游戏

热门文章

  1. char和vchar
  2. CentOS 5.4 下配置FTP服务器 [转帖]
  3. 斐波那契数列取模(大数)分治算法
  4. 在虚拟机中温习DOS
  5. 用表格布局2个链接6个图片
  6. SpringBoot之web开发
  7. 带着问题读CLR via C#(六)常量与字段
  8. Centos mysql的安装和配置
  9. hibernate对象关系实现(二)一对一
  10. ABP理论学习之开篇介绍