首页 > 代码库 > 对欧拉回路的一些理解

对欧拉回路的一些理解

欧拉回路的简单定义:对一个连通图来说,如果遍历这个图的时候可以把每条边都遍历一次,并且只能遍历一次,那么此图便有欧拉回路。

 

上面的红体字也就说明了判断一个图是否有欧拉回路的关键:

                           1. 必须是连通图   2.每条边必须且只能遍历一次。

 

那么首先我们要解决第一个问题: 如何判断一个图是否连通呢?

    这里提供两种解决方案: 1.dfs深搜   看看是不是能够访问到所有的顶点。如果能,则连通。反之,则不能;

               2. 通过并查集。 将所有顶点加入集合后,判断一共有多少个祖先,如果祖先数大于1,则不是连通图,如果等于1 则连通。

 

下面,我们来考虑第二个问题,如何检测每条边遍历一次呢?

 

    有向图: 入度 = 出度

    无向图: 所有顶点的度为偶数

仔细想一想便可以得到这个结论。

 

再附上我的错误思路:

    一开始我以为可以通过直接判断一个图的度来是否是欧拉回路,我以为也可以通过度是否为0来判断是否连通,可是这样不对~下面的图就是反例

 

对欧拉回路的一些理解