当前位置: 首页 > 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.yayakq.cn/news/845218/

相关文章:

  • 网页设计与网站建设考试题网站建设设计图
  • 中小型企业建设一个网站大概需要多少钱腾讯云如何建设网站首页
  • 中国工商建设标准化协会网站郑州上街区网站建设公司
  • 京东网站建设的特点专业网站定制价格便宜
  • 邢台做wap网站网络广告推广平台
  • 长春有免费做网站的么2022免费永久服务器
  • 怎么做别人可以上的网站免费网站开发公司
  • 新加坡房产网站大全宝安做棋牌网站建设
  • 增城网站公司电话个人建网站步骤
  • 网站关键词搜索排名优化实力app开发公司
  • 兼职做平面模特网站会议网站怎么做
  • wordpress去版权 合法北京网站优化济南兴田德润简介电话
  • 网站修改如何建网站遂宁
  • 如今做哪些网站致富共享的网站备案
  • 北京做公司网站公司网站降权的原因
  • 做网站的前端技术网站开发职业访谈
  • 珠海集团网站建设报价百度站长平台查询
  • 化妆品网站内容规划网络营销教案
  • ps做网站图片什么是电子商务网站
  • 响应式网站图解图片网站cms
  • 织梦网站源码wordpress 文章 自定义排序
  • 建企业网站怎么收费郑州网络公司现状
  • 中小企业网站建设公司首选最简单的wordpress
  • tp框架做商城网站怎么用缓存上海网站开发设计培训
  • 设计介绍人的网站京津冀协同发展交通一体化规划
  • 便利的集团网站建设在线观看免费网站
  • 哪里有网站开发服务器网站分析步骤
  • 网站开发外文参考文献外贸销售模式
  • 免费搭建网站教程网站空间 windows linux
  • 汕头建站网站加速代码