
需求描述假设有100个网络节点两两相连、连接属性有带宽值和连接质量Qos。现给出10对起止节点以及各对起止节点间需要的带宽值要求按顺序、分别找到满足这10组起止节点的Qos最优的路径。求解过程1、先找到10组起止节点的最小带宽B然后筛选出 ≥ B的所有边和100个网络节点构成有向、权重以Qos作为权重图T2、在T的基础上先求第一对起止节点的路径用图T的全部节点、和筛选出满足 ≥ 第一对起止节点带宽值B1的部分边作为AsSubgraph子图T1用DijkstraShortestPath算法求出路径P13、把路径P1上所有的边的带宽值减去B1筛选出满足 ≥ B2的边作为新的边构成新的AsSubgraph子图T2在T2上用DijkstraShortestPath算法求出路径P2…………4、直至把10对起止节点都计算完。问题描述在上述步骤3中发现虽然P1中的一部分边在减去B1后仍满足 ≥ B2的条件在构成子图T2时也传入了这部分边但在T2中并未发现这部分修改过带宽值的边造成求出的路径P2不准确。原因排查经过排查发现在自定义的边MyEdge类中因为使用了lombok的Data注解这个注解会重写MyEdge类的hasCode方法使哈希值随着MyEdge中的属性Qos质量值、bandWidth带宽值的变化而变化。但是在构建AsSubgraph子图时会比较边的哈希值如果边的哈希值有变化则认为边被修改从而不被放入到子图中。解决方法在自定义的边MyEdge类中不使用data注解手写各个属性的getter、setter方法使用Object原始的根据地址相关的hasCode方法。这样在修改各个边的bandWidth带宽值后边的hasCode不会发生变化还可以继续放入到后续的子图中进行下一对起止节点间路径的寻找。