iOS-无序图环的寻找和FBRetainCycleDetecto
2018-11-19 本文已影响0人
IBigLiang
之前在面试的时候有遇到过问无序图找环的问题, 当时觉得有点闷逼, 毕竟不是科班出身, 也没有静下心去看一些算法的知识. 最近在看Facebook的FBRetainCycleDetector的SDK的时候,看到运用DFS的算法找循环引用,回想到之前找环的问题,原理一致,然后今天就自己写了一个找环的demo
下图是一张包含几个环的无序图:
![](https://img.haomeiwen.com/i10378163/a08407a5f1520ef9.png)
先将每个顶点封装成为一个对象:
![](https://img.haomeiwen.com/i10378163/2a46cf7cb85c2b2f.png)
然后根据无序图封装每一个顶点,如下代码:
![](https://img.haomeiwen.com/i10378163/2d2c3cae67c1e947.png)
接下来就是来寻找图中顶点所产生的环, 代码如下:
![](https://img.haomeiwen.com/i10378163/e6df54d4c3c23c3c.png)
按照我上面无序图来说,无序图的最深深度是如下图:
![](https://img.haomeiwen.com/i10378163/38825f89f9c6748a.png)
大致的思路就是:
以顶点1为起始顶点, 通过深度寻找法,找到最后一个顶点6,然后一步一步往回寻找环(当然这是以我给的例子作为代表, 如果起始顶点和封装的相连顶点列表中顶点的顺序不一致的话,过程会不一样,不过最终找到的环是一样的), 代码步骤的思路我已经写在demo里面了
以下是demo地址: (包含FBRetainCycleDetector的最简单的demo)
https://github.com/IBIgLiang/iOS-RetainCycleStudy
下次再介绍FBRetainCycleDetector的源代码!!!