类图到源码分析工具----合并元素处理,图的同构,回环处理

练手最多的也就是广搜,今天连个状态机也写不出来,弱,非常的弱,眼高手低的毛病一直没改,幸好我周围好人很多,很多。

 

分析一下处理这个图的同构和回环处理方法。

首先是第一种情况,两个类图,要合并的元素是一样的类或者接口。可以这样理解为一个为正本,一个为副本。方法如下:

1,把副本的目标元素,删除,正本顶替副本的位置。

2,只要副本直接关联元素和间接关联元素显示为TRUE,则直接把正本的直接和间接关联元素替换为副本的元素。不管正本那边的关联元素为true

或者为false;

3,如果副本关联元素为false,则服从于正本关联元素。

本着这个想法,先对副本做一次广搜,然后把显示为true的元素入队列,接着和正本元素映射,但凡映射上的元素执行两个步骤,替换自己的位置,替换和目标元素直接关联元素内存储的目标元素。例如目标元素A的关联元素是B,C,D,那么B,C,D里面有A,如果A替换为a,那么B,C,D里面也要替换A为a。

 

于是乎就有了以下代码:

 

CSDN居然没能控制长宽。

 

处理另一种情况:处理圆环情况。

和前辈讨论了一下,明白了情况,问题解决方法就浮出水面。

有一条回路,A,B,C,D,A。现在要合并两个A,另外有两个A各自带了E,F和E,F。元素都相同的。合并的时候要区分回路上的元素和非回路上的元素,一开始,讨论出,要从副本每个元素都跑一遍,也就是每个元素都深搜一遍看看是不是在一条回路上,后来想了想,从正本那边出发就不用了去考虑那么多了,因为从副本到正本只有一条路,只要获得了正本就说明和正本直接关联的那个元素N就在回路上,那么就不处理N,直接处理把副本删除,和正本的非N得直接关联元素删除,把正本元素和副本的直接关联元素黏合。黏合方法和上述一样。

 

加多这个处理函数

 

 

有个关键问题,一开始是以元素名字映射防止返回已经遍历过的元素,但是在回路上,是有出现双胞胎的情况,遍历过的这个元素名很可能在回路上也存在。所以改为用id单独映射。

 

图这块当初没好好学。现在我的心态确实很浮躁。好好地干自己的分内事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值