基于目前Network项目需要,研究相关树形算法
该需求难点如下:
1、目前拓扑图是无向图,而树大多数都是基于有向图来画的,无法确定根节点
2、网络拓扑中存在回环问题,导致链路可能会存在重叠问题
针对问题1,目前根据所有节点的连通度来计算得出连通度最大的点作为根节点。
问题2目前没有完美的解决方案。
目前这边demo的算法分为2种
1、根据每层叶子节点个数切割X轴坐标,然后平均分布在一条直线上。
效果图如下:
代码比较简单,暂时就不公布了。
2、类似于一种递归的方式,从第一层叶子节点开始切割X轴,第二层叶子节点的范围不能超过上层节点之间的节点间距。
直接看图:
这种方式的弊端显而易见,如果后面存在大量叶子节点的枝节点,那么这里的叶子会非常密集
改变一下根节点样子或许会好一些,但是这边会出现回路重合链路问题:
下面贴上部分代码:
public ResponseEntity getTreeTopo() {
NodeList nodeList = new NodeList();
HashMap nodeCountMap = new HashMap<>();
//统计所有节点的连通度
for