ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:500.94KB ,
资源ID:15163234      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15163234.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Floyd算法的最短路径问题的求解c++Word格式文档下载.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于Floyd算法的最短路径问题的求解c++Word格式文档下载.docx

1、由此所得广度优先生成树上,从根顶点A到顶点B的路径就是中转次数最少的路径,路径上A与B之间的顶点就是途径中的中转站数。但是这只是一类最简单的图的最短路径的问题。有时对于旅客来说,可能更关心的是节省交通费用;对于司机来说里程和速度则是他们感兴趣的信息。为了在图上标示有关信息可对边赋以权的值,权的值表示两城市间的距离,或图中所需时间,或交通费用等等。此时路径长度的量度就不再是路径上边的数目,而是路径上边的权值之和。边赋以权值之后再结合最短路径算法来解决这些实际问题。Floyd算法是最短路径经典算法中形式较为简单,便于理解的一种。2 算法基本原理2.1 邻接矩阵邻接矩阵(Adjacency Matr

2、ix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V=v1,v2,vn。G的邻接矩阵是一个具有下列性质的n阶方阵:(1)对无向图而言,邻接矩阵一定是对称的,而且对角线一定为零(在此仅讨论无向简单图),有向图则不一定如此。(2)在无向图中,任一顶点i的度为第i列所有元素的和,在有向图中顶点i的出度为第i行所有元素的和,而入度为第i列所有元素的和。(3)用邻接矩阵法表示图共需要个空间,由于无向图的邻接矩阵一定具有对称关系,所以扣除对角线为零外,仅需要存储上三角形或下三角形的数据即可,因此仅需要n/2个空间。2.2 弗洛伊德算法弗洛伊德算法使用图的邻接矩阵arcsn+1n+1来存储

3、带权有向图。算法的基本思想是:设置一个n x n的矩阵A(k),其中除对角线的元素都等于0外,其它元素a(k)ij表示顶点i到顶点j的路径长度,K表示运算步骤。开始时,以任意两个顶点之间的有向边的权值作为路径长度,没有有向边时,路径长度为,当K=0时, A (0)ij=arcsij,以后逐步尝试在原路径中加入其它顶点作为中间顶点,如果增加中间顶点后,得到的路径比原来的路径长度减少了,则以此新路径代替原路径,修改矩阵元素。具体做法为: 第一步,让所有边上加入中间顶点1,取Aij与Ai1+A1j中较小的值作Aij的值,完成后得到A(1);第二步,让所有边上加入中间顶点2,取Aij与Ai2+A2j中

4、较小的值,完成后得到A(2),如此进行下去,当第n步完成后,得到A(n),A(n)即为我们所求结果,A(n)ij表示顶点i到顶点j的最短距离。因此弗洛伊德算法可以描述为:A(0)ij=arcsij; /arcs为图的邻接矩阵A(k)ij=minA(k-1) ij,A(k-1) ik+A(k-1) kj,其中 k=1,2,n(1)定义一个n阶方阵序列: D(-1),D(0),,D(n-1).D(-1) ij = G.arcsij;D(k) ij = min D(k-1)ij,D(k-1)ik + D(k-1)kj ,k = 0,1,n-1(2)其中D(0) ij是从顶点vi 到vj中间顶点是v0

5、的最短路径的长度;D(k) ij是从顶点vi 到vj中间顶点的序号不大于k的最短路径长度;D(n-1)ij是从顶点vi 到vj 的最短路径长度。3 类设计3.1 类的概述类代表了某一批对象的共性和特征。类是对象的抽象。类这种数据类型中的数据既包含数据也包含操作数据的函数。声明类的一般形式:class 类名 private: 私有的数据和成员函数; public: 公用的数据和成员函数; ;定义对象:类名 对象名;可以在类外定义成员函数,在函数名前加上类名,“:”是作用域限定符或称作用域运算符用它说明函数式属于哪个类的。如下面程序中的void MGraph:CreateMGraph(MGraph

6、 &G) 函数体3.2 类的接口设计 #include#include stdio.husing namespace std;#define MaxVertexNum 100#define INF 32767class MGraphprivate: char vertexMaxVertexNum; /顶点信息 int edgesMaxVertexNumMaxVertexNum; /邻接矩阵 int n,e; /顶点数和边数 void CreateMGraph(MGraph &); /构造有向图 void Ppath(int100,int,int); void Dispath(int100,in

7、t100,int); /输出最短路径 void Floyd(MGraph G); /Floyd算法的具体实现;首先将所需文件名写好,定义类MGraph。在进行类体构造时将数据char vertexMaxVertexNum、int edgesMaxVertexNumMaxVertexNum和int n,e定义为私有数据,将成员函数void CreateMGraph(MGraph &)、void Ppath(int100,int,int)、void Dispath(int100,int100,int)和void Floyd(MGraph G)定义为公用的,以便非类体内的数据调用函数。3.3 类的实

8、现G)/构造有向图 int i,j,k,p; coutG.nG.e;请输入顶点元素: for (i=0;iG.n;i+) G.vertexi; for (j=0;jj+) G.edgesij=INF; if (i=j) G.edgesij=0; for (k=0;kk+) 请输入第k+1jp; G.edgesij=p;Ppath(int pathMaxVertexNum,int i,int j) /Ppath()函数在path中递归输出从顶点vi到vj的最短路径。 int k; k=pathij; if (k=-1) / pathij=i时,顶点vi和vj之间无中间顶点,也就是说找到了始节点

9、return; Ppath(path,i,k); printf(%d,k); Ppath(path,k,j); Dispath(int AMaxVertexNum,int pathMaxVertexNum,int n)/输出最短路径的算法 int i,j;n; if (Aij=INF) if (i!=j) 从%d到%d没有路径n,i,j); else 从%d到%d=路径长度:%d路径:,i,j,Aij);%d,i); Ppath(path,i,j);%dn,j);Floyd(MGraph G) int AMaxVertexNumMaxVertexNum,pathMaxVertexNumMaxV

10、ertexNum; int i,j,k; Aij=G.edgesij; pathij=-1;k+) / /向vi与vj之间中n次加入中间顶点 if (AijAik+Akj) Aij=Aik+Akj; pathij=k;/ 表示从i节点到j节点,要经过k节点 Dispath(A,path,G.n);4 基于控制台的应用程序4.1 主函数设计int main() MGraph G; G.CreateMGraph(G); G.Floyd(G); return 0;在程序的主函数部分,定义一个MGrapha类的对象G,调用成员函数CreateMGraph()和Floyd()分别完成了采用图的邻接矩阵实

11、现最短路径问题中图的存储和采用Floyd算法求每一对顶点的最短路径的任务。4.2 运行结果及分析 将待测图的相关数据输入则得到如图1的运行结果。图1 程序运行结果从图1可以看出:整个程序中的矩阵存储采用的是一维数组和动态内存分配方式。通过此类定义邻接矩阵,采用图的邻接矩阵实现最短路径问题中图的存储,然后通过主函数main调用class来实现,采用Floyd算法求每对顶点间最短路径从某个源点到其余各顶点的最短路径。将图的基本信息输入,顶点数和边数4、8,顶点元素A、B、C、D,8条弧各自的序号和权值。运行程序得出每对顶点间的最短路径长度和路径。基于Floyd算法成功的解决了最短路径问题。5 基于MFC的应用程序MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1