当前位置: 首页 > news >正文

好习惯网站南昌网站优化公司

好习惯网站,南昌网站优化公司,专业网站建设市场,目前主流网站建设软件迪锐克斯拉算法 简单来说就是在有向图中,给定一个图中具体的出发点,从这个点出发能够到达的所有的点,每个点的最短距离是多少。到不了的点,距离则是正无穷。有向,无负权重,可以有环。 所以说,迪…

迪锐克斯拉算法
简单来说就是在有向图中,给定一个图中具体的出发点,从这个点出发能够到达的所有的点,每个点的最短距离是多少。到不了的点,距离则是正无穷。有向,无负权重,可以有环
所以说,迪锐克斯拉算法是生成一个从源点出发到各个点的最小距离表。
举例:有向图如图所示
在这里插入图片描述

从给定的出发点a出发,最终要获得的是a到b,c,d,e每个点之间的最短距离。默认a到自己的距离是0,其他的点还没到达的点的距离是正无穷。已经确定的答案不动,在没有确定的记录中找一个最小的出来

abcde
0正无穷正无穷正无穷正无穷

所以先从a点出发的三条边1,2,6。中找出权重为1的边,ad距离为1,小于之前的正无穷(比之前距离小),所以更新a到d之间的距离,bcd同理。所以更新完后距离如下:

abcde
0261正无穷

此时,从a出发的三条边已经走完,所以a点确定下来,再也不动。
其余没有确定的记录中d是最短的(从a出发到b的距离为1),所以从d开始向下找(d属于中间的跳点)。
d出发的边有两条,分别是dc和de。其中dc距离为2,再加上之前a到d的距离为1,所以此时a到c的距离经过d跳转后为3,小于之前的6,所以更新ac之间距离,同样de距离7小于正无穷。所以也进行更新。d也确定了。

abcde
02317

接下来从不确定的记录中根据最小的向下找。b点出发的边有一条be,be距离9加上a到b的距离2,所以be距离为11,大于之前的,不更新。b也确定了。

abcde
02317

还剩下c,从c点出发的边有两条,cb和ce,因为b点已经确定了不再动,所以一看ce一条,ce距离为3,a到c距离为3,所以ae之间距离为6,小于之前,更新e点距离。

abcde
02316

代码
根据上面的分析进行代码的实现,不过getMinDistanceAndUnSelectNode有瑕疵,因为每找一个minNode就会在集合中都遍历一次。会在下面进行代码优化。

  public static HashMap<Node, Integer> dijkstra1(Node from) {HashMap<Node, Integer> distanceMap = new HashMap<>();distanceMap.put(from, 0);//已经确定的边;HashSet<Node> selectedNodes = new HashSet<>();//根据已经确定的记录 和 map,找出没确定的中最小的记录Node minNode = getMinDistanceAndUnSelectNode(distanceMap, selectedNodes);while (minNode != null) {int distance = distanceMap.get(minNode);for (Edge edge : minNode.edges) {Node toNode = edge.to;if (!distanceMap.containsKey(toNode)) {distanceMap.put(toNode, distance + edge.weight);} else {//edge.weight + distance 当前边的权重 + 我此时当做跳点的距离。//distanceMap.get(toNode) 已经存在的距离distanceMap.put(toNode, Math.min(distanceMap.get(toNode), (edge.weight + distance)));}}//所有的边都已经遍历完,这个点可以确定了,放到确定的集合中。selectedNodes.add(minNode);//再次获取最小的记录minNode = getMinDistanceAndUnSelectNode(distanceMap, selectedNodes);}return distanceMap;}public static Node getMinDistanceAndUnSelectNode(HashMap<Node, Integer> distanceMap, HashSet<Node> selectedNode) {Node minNode = null;int minDistance = Integer.MAX_VALUE;for (Map.Entry<Node, Integer> entry : distanceMap.entrySet()) {Node node = entry.getKey();int distance = entry.getValue();if (!selectedNode.contains(node) && distance < minDistance) {minDistance = distance;minNode = node;}}return minNode;}
http://www.zhongyajixie.com/news/15572.html

相关文章:

  • 做网站店铺怎样打理西安seo技术培训班
  • 目前做公司网站有没有用google google
  • 怎么让搜索引擎收录网站独立站seo
  • 怎么隐藏一页wordpressseo推广seo技术培训
  • 公司如何建设网站首页大数据培训
  • wordpress加标题seo软件简单易排名稳定
  • wordpress 链接分类seo优化专家
  • 免费安全seo优化工作有哪些
  • 庐江网站广告怎么做网站推广的要点
  • 界首做网站永久8x的最新域名
  • 网站怎么做搜素引擎内容营销
  • 上海工程信息网seo网站管理
  • 电商网站计划企业网络推广的方法有哪些
  • 福建省建设厅官方网站品牌宣传有哪些途径
  • 搜索网站的软件有哪些最近国际时事热点事件
  • 什么公司会招网站建设app制作
  • 网站架构优化搜索引擎优化的缺点包括
  • wordpress 运行慢北京自动seo
  • app案例网站上海百度搜索优化
  • 做自己的免费网站微信指数
  • 张家港网站设计制作早晨设计湖南株洲疫情最新情况
  • 廊坊做网站优化的公司网络优化工资一般多少
  • 发布广东建设工程信息网站长沙自动seo
  • 便捷的邢台做网站seo是什么化学名称
  • 网站用什么做关键词百度联盟怎么赚钱
  • 网站设置iis日志夸克搜索
  • wordpress 中文主题南平seo
  • 山东网站建设空间正规接单赚佣金的平台
  • 网站平台开发与应用面试友情链接检测平台
  • 郑州区块链数字钱包网站开发方案百度电脑端网页版入口