求带便函数权值的最短路径
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
求带便函数权值的最短路径相关推荐
- matlab计算绝对值的导数,如何用matlab求带绝对值函数的导数? 你值得一看的技巧...
用matlab求函数的导数:如果一个函数表达式中有绝对值,那对该函数求导就需要注意啦!该函数可能在他的零点处导数不存在,所以我们不能用传统的方法求导,应该在零点处分别求左导数和右导数,如果左导数和右导 ...
- JS学习之求带参函数求任意两个数和
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>带参函 ...
- (dijkstra算法+多权值)最短路径问题
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input 输入n,m,点的编号是1~n,然后是m ...
- 图算法:2、计算带有负权值的单源最短路径:Bellman-Ford算法
原文地址:http://www.wutianqi.com/?p=1912 相关文章: 1.Dijkstra算法: http://www.wutianqi.com/?p=1890 2.Floyd算法: ...
- P1351 联合权值[鬼畜解法]
题目描述 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v 点的最短距离 ...
- c语言 编写一个求圆面积的函数area,该函数有一个形式参数r,c语言编写一个求圆面积的函数area,有形参,类型为float...
用c语言编写函数,求圆的周长和面积,用函数.急求. #include#definePI3.1415926doublearea(doubler){returnPI*r*r;}doubleperimete ...
- 图论算法(三)--最短路径 的Bellman-Flod [ 带负权值图 ] 的解法(JAVA )
Bellman-Flod算法 对于带有负权值的图,我们已经不能通过Dijkstra算法进行求解了 原因:Dijkstra每次都会找一个距源点(设为s)最近的点,然后将该距离定为这个点到源点的最短路径: ...
- 【BZOJ4129】Haruna’s Breakfast,树上带修莫队+权值分块求mex
Time:2016.09.08 Author:xiaoyimi 转载注明出处谢谢 思路: 这道题相当于把昨天学的树上莫队和带修莫队融合了一下,顺便加了一个mex(未出现的最小自然数) 那么主要问题就是 ...
- 带权值的斐波那契数列函数的曲线形态
带权值的斐波那契数列函数 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∗ ...
最新文章
- php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用
- 如何选择最优路径完成云原生上云?听这场阿里云特别分享【云原生技术与最佳实践】
- 详解静态路由(入门类)
- 利用SecureCRT在linux与Windows之间传输文件
- burpsuite小米手机抓包_使用burpsuite实现Android APP的HTTPS抓包
- 草稿selenium显示等待
- 分享一个VS2013代码窗口一闪而过的解决方案。
- InvalidClassException
- 洛谷 P1400 塔
- oracle 主要语句大荟萃
- VUE3中使用粒子特效
- BC26低功耗的OPENCPU代码注意事项
- Processing 入门基础【秒懂小白篇】
- 仿豆果美食tableview的展开和收缩效果
- 计算机专业的浪漫情话,计算机科学与技术表白情话
- Cygwin使用介绍
- Linux系统的信号详解
- 全国计算机设计大赛贴吧,2019继续教育学院精彩时刻——大赛篇
- EtherCAT总线介绍及从站硬件设计
- bzoj2121 字符串游戏