最近开发遇到了一个需求,需要动态添加操作人员,且两个不同的人员可以指定同一个操作人员,最终所有人员都需要汇总到同一个操作人,同时在页面中需要将这些人员全部展示出来,类似于思维导图形式展示人员。
起始由于调研不足,选择了jsmind插件,jsmind插件展示思维导图确实比较好看,以思维导图的形式展示多级操作人员,后发现该组件无法指向同一个节点,且存储的数据格式较为复杂,最终决定放弃该组件,重新寻找更合适的展示方法。
经过多方调研,发现echats关系图应用在需求上很合适,因此选用了echats关系图进行操作人的展示,在添加操作人员的时候要确保不能形成闭环,为了避免添加人员时形成闭环,我在此处引用了深度优先遍历算法避免闭环的形成。
深度优先遍历算法的思想大学的时候都学过,有不记得的可以去下面链接瞧一瞧哈,或者多百度百度,解释的还是很多的
https://blog.csdn.net/basycia/article/details/50766171
在关系图中应用深度优先遍历算法的思想如下:
1.在添加操作人节点时,先根据nodes数组创建临时数组nodes_temp,将本次添加的操作人节点push进入nodes_temp中,edgs也一样,创建edgs_temp,将本次指向push进入edgs_temp中,利用调用以下方法也就是create(nodes_temp,edgs_temp)创建图结构
2.创建好图结构后调用以下深度优先遍历方法
每个数据的格式
3. 最终根据isDAG的值判断是否形成闭环,若无闭环,则执行添加节点操作,反之提示形成闭环,重新选择操作人员
思想就是这么个思想