北交计算机网络13281069编程实现路由算法讲述.docx

北交计算机网络13281069编程实现路由算法讲述.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北交计算机网络13281069编程实现路由算法讲述

编程实现路由算法 实验目的 运用各种编程语言实现基于Dijkstra 算法的路由软件。 实验意义 通过本实验,使学生能够对路由原理和路由算法有进一步的理解和掌握。 实验背景 Dijkstra 算法描述如下: 设: c(i,j): 结点i 至结点j 之间链路的代价,若i,j 不直接相连,则为无穷大。 D(v): 当前从源结点至目的结点V 之间路由的代价。 p(v): 从源结点至目的结点V 之间路由中V 之前的结点 N: 已经知道最优路径的结点集合 1 Initialization: 2 N = {A} 3 for all nodes v 4 if v adjacent to A 5 then D(v) = c(A,v) 6 else D(v) = infty 7 Loop 8 find w not in N such that D(w) is a minimum 9 add w to N 10 update D(v) for all v adjacent to w and not in N: 11 D(v) = min( D(v), D(w) + c(w,v) ) 12 /* new cost to v is either old cost to v or known 13 shortest path cost to w plus cost from w to v */ 14 until all nodes in N 实验步骤 选择合适的编程语言编程实现基于 Dijkstra 算法的路由软件。 输入不同的网络拓扑和链路代价测试和验证自己的路由软件。 设计方法 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 本实验使用OPEN,CLOSE表方式来实现Dijkstra算法,其采用的是贪心法的算法策略,过程如下: 声明两个集合,open和close,open用于存储未遍历的节点,close用来存储已遍历的节点 初始阶段,从键盘输入节点、边、权值、初始节点等信息,使用MapBuilder类初始化数据源,用Node对象封装节点信息,包括名字和子节点,将初始节点放入close,其他所有节点放入open,并返回图的起始节点。 从open中选出距离最短的顶点k,并将顶点k加入到close中;同时,从open中移除顶点k。 更新open中各个顶点到起点的距离。之所以更新open中顶点的距离,是由于上一步中确定了k是求出最短路径的顶点,从而可以利用k来更新其它顶点的距离。 重复步骤(3)和(4),直至close包含所有子节点。 六、 类概览与描述 (1) Node类:用于封装节点信息,包括节点名name和子节点child两个属性。child表示和此结点相邻的结点以及两个结点之间的代价,主要功能函数为对两各私有属性的set和get函数。 (2) MapBuilder类:用于初始化数据源,返回图的起始节点。主要功能函数为: public Node build(SetNode open, SetNode close, MapString, Node nodes)用于接收从键盘输入的节点个数,节点名称,边的条数,边的信息,起始点等信息,并将节点名,节点与其子节点之间的代价存入Node对象之中,将起始点存储到close变量中,其它节点存储到open变量中。 (3)Dijkstra类:实现核心功能, open属性用来存储尚未加入最短路径的节点,close属性存储已加入最短路径的节点,path属性用来封装各节点到起始节点的路径距离,pathInfo属性用来保存路径信息(起始点到各目标节点的最短路径上的路由器名称)。该类用于计算起始节点到所有其他节点的最短路径。主要功能函数有: public void init() :初始化路径,调用MapBuilder类中的build函数,将初始节点放入close,其他节点放入open中,并且对于open中的每一个节点,将其到起始点的路径距离存入path变量中(若与起始点不相邻,则距离设置Integer.MAX_VALUE),路径信息存入pathInfo变量中。 public void computePath() :计算起始节点到所有其他节点的最短路径和路径信息。首先调用getShortestPath函数,获取到距离最近的子节点,存入close变量之中,然后更新open中各个顶点到起点的距离,递归调用computePath函数向外一层层递归,直至所有顶点被遍历。 private Node getShortestPath() :获得与当前结点最近的子结点, 并返回该节点

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档