ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最小生成树和最短路径的区别

2021-12-04 16:04:57  阅读:223  来源: 互联网

标签:tempcost ASwitch 路径 最小 生成 alreadyVisited sw1 sw2 size


最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径。

最短路径是从一点出发,到达目的地的路径最小。

最小生成树所有点被连通  。把连通的图的所有顶点连起来路径之和最小的问题,即生成树总权值之和最小。整体来分析。

最短路径不一定所有点。只着眼于点与点之间的路径问题,并不关注整个图,也就意味着对一个节点运行算法的结果与另一个节点的结果之间没有多少关系。单条路径来分析。

Prims算法代码

while(alreadyVisited.size() != Switches.size())
            {
                Vector neighbors = getNeighborSet(topo, Switches, alreadyVisited);
                Vector CostOfNeighbors = new Vector();
                int cost = 40000000;
                ASwitch srcsw = null, dstsw = null;
                for(int i = 0;i < neighbors.size();i++)
                {
                    ASwitch sw1 = (ASwitch)neighbors.get(i);
                    for(int j = 0;j < alreadyVisited.size();j++)
                    {
                        ASwitch sw2 = (ASwitch)alreadyVisited.get(j);
                        int tempcost = getCost(topo, sw1, sw2, insid, "legacy");
                        if( (tempcost > 0) && (tempcost < cost ))
                        {
                            cost = tempcost;
                            srcsw = sw1;
                            dstsw = sw2;
                        }
                    }
                }//end for neighbors
                //得到一个最小花费的邻居
                alreadyVisited.add(srcsw);
                
                treenode temptr = new treenode();
                temptr.Mac = srcsw.SWName;
                current.childlist.push(temptr);
                current = temptr;
            }//end while

dijkstra算法

while(Visited.size() != Switches.size())
              {
                  for(int i = 0;i < alreadyVisited.size(); i ++)
                  {
                      ASwitch sw1 = (ASwitch)alreadyVisited.get(i);
                      System.out.println("already visited: "+sw1.SWName);
                      Vector ng = getNeighbors(topo, Switches, sw1);
                      alreadyVisited.remove(sw1);
                      //Visited.add(sw1);
                      Visited = addtoVector(Visited,sw1);
                      for(int j = 0;j < ng.size();j++)
                      {
                          ASwitch sw2 = (ASwitch)ng.get(j);
                          if((swValue.get(sw2) == 0) ) continue;
                          int tempcost = -1;
                          int tcost = getCost(topo, sw1, sw2, insid, "legacy");;
                          if(tcost >0 ) tempcost = swValue.get(sw1)+tcost;
                          if((tempcost > 0) && (tempcost < swValue.get(sw2)))
                          {
                              swValue.put(sw2, tempcost);
                              presw.put(sw2, sw1);
                              System.out.println("sw: "+sw2.SWName+"   cost: "+tempcost+"   presw: "+sw1.SWName);
                              
                              alreadyVisited.add(sw2);
         
                          }
                      }
                  }
              }

标签:tempcost,ASwitch,路径,最小,生成,alreadyVisited,sw1,sw2,size
来源: https://blog.csdn.net/qq_42824207/article/details/121716852

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有