Graph Valid Tree[Important]

首先需要建立一个adjacency Matrix. A list of List. 表示每个vertex 能够到的vertex。


判断一个Graph是不是Tree 主要的条件是 1. 不能有cycle   2. 所有node都connected。

DFS+Adjacency Matrix.

一个很容易错的地方在因为这是一个undirected graph, 所以edge是双向的。添加入Adjacency 时候很容易只加了单方向的edge。

最难的地方在于如何check Cycle. 虽然是用DFS做, 但是跟普通DFS遍历tree还是有点不一样。首先你也不知道他是不是tree,也许并没有connected。所以即便到了某一个node,然后这个node从来没去过,也不能就得出结论说这里很ok之类的。因为如果这个node的parent 就说他自己的话,那还是一个cycle! 还有就是用一个visited 的array来表示有没有去过一个地方也是非常重要的。

UnionFind

Union Find使用的时候要assume node没有self loop。还是老套路,用一个parent array. 

For each edge, make subset using both vertices. If both vertices are in the same subset, found a cycle.

蛮deep的概念,看底下的英文解释会比较容易理解。




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容