- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Dijkstra最短路径算法课程设计
二、Dijkstra最短路径算法
利用matlab软件实现Dijkstra最短路径算法
要求:
输入节点数量,随机产生网孔型(不完全网状网)网络拓扑(随机产生每条链路的度量)
计算并画出任意两点之间的最短路径,以及以任一点为根的最短路径树。
设计过程
一、 Dijkstra算法
首先,引进一个辅助向量D,它的每个分量D表示当前所找到的从始点v到每个终点vi的最短路径的长度。如D[3]=2表示从始点v到终点3的路径相对最小长度为2。这里强调相对就是说在算法过程中D的值是在不断逼近最终结果但在过程中不一定就等于最短路径长度。它的初始状态为:若从v到vi直接相连,则D为之间的直接权值;否则置D为∞。显然,长度为 D[j]=Min{D | vi∈V} 的路径就是从v出发的长度最短的一条最短路径。此路径为(v,vj)。假设该次短路径的终点是vk,则这条路径或者是(v,vk),或者是(v,vj,vk)。它的长度或者是从v到vk的弧上的权值,或者是D[j]和从vj到vk的弧上的权值之和。 一般情况下,假设S为已求得最短路径的终点的集合,则可证明:下一条最短路径(设其终点为X)或者是弧(v,x),或者是中间只经过S中的顶点而最后到达顶点X的路径。因此,下一条长度次短的最短路径的长度必是D[j]=Min{D | vi∈V-S} 其中,D或者是弧(v,vi)上的权值,或者是D[k](vk∈S)和弧(vk,vi)上的权值之和。
随机产生网络拓扑,随机产生两点之间的度量,若两点直接相连,给出一个随机数(在此随机取从1到20之间的某一个数)。
二、 程序设计
%Dijkstra/最短路径算法
%输入结点数量,随机产生网孔型(不完全网状网)网络拓扑(随机产生每条链路的度量)。
clear all
N=6 ;%输入结点的数量
net=zeros(N,N);
for i=1:N
for j=1:N
net(i,j)=randint(1,1,10);%随机产生每条链路的度量;
end
end
for i=1:N
net(i,i)=0;end
m=randint(1,1,N*(N-1)/2);
for k=1:m
i=randint(1,1,(N-1));
j=randint(1,1,(N-1));
net((i+1),(j+1))=Inf;
end
net=net+net;
neigh=zeros(N,N);
for i=1:N
for j=1:N
if(net(i,j)==inf)
neigh(i,j)=0;
else
neigh(i,j)=net(i,j);
end
end
end
netplot(neigh);title(随机产生网孔型网络拓扑)
%dijkstra 算法求任意两点之间的最短路径,以及任一点为根的最短路径树
%%%
s=1;e=3;%s 根节点;e 终结点,可以随便选取
%%%
n=size(net,1); % 邻接矩阵的行数n
D=net(s,:); % 邻接矩阵始结点行数据,也就是从s结点到其他结点的直接距离
path=[]; % 路径初始化
visit=ones(1,n); % 结点的可访问性
visit(s)=0; % 已经加入的点不可再访问,初始化的源节点不可访问
parent=zeros(1,n); % 经过的点
% the shortest distance
for i=1:n-1 %循环n-1次
temp=zeros(1,n); %临时存储
count=0;
for j=1:n
if visit(j)
temp=[temp(1:count) D(j)];
else
temp=[temp(1:count) inf];%到自身距离定义为无穷
end
count=count+1;
end
[value,index]=min(temp);%对每一次循环得到从始点到其它结点最短距离
j=index; visit(j)=0; %j为temp中最短距离的坐标,即
for k=1:n
if D(k)D(j)+net(j,k)%如果经过另一个结点到所求结点的更短距离,则用此距离替换原数据
D(k)=D(j)+net(j,k);
您可能关注的文档
- 2013电大西方行政学说选择填空题排序版.doc
- 2013电大生产与运作管理考试答案.doc
- 2013理综生物专练3.doc
- 2013绍兴市科研方法与论文写作实战试卷及答案最新.doc
- 2013电大西方行政学说考试答案.doc
- 2013至2014年巢湖学院大一高数试卷.doc
- 2013级旅游管理专业人才培养方案-.doc
- 2013西南科大数据库原理试题库与解析.doc
- 2013财管第六章投资管理(第一次复习).doc
- 2013离散数学II1试卷B答案.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)