欧拉回路

欧拉回路

北城余情 提交于 2019-11-27 04:43:35
欧拉回路与欧拉路径 欧拉回路 不重复地结果每条边的回路 欧拉路径 不重复地几个每条边地路径 欧拉图 存在欧拉回路地图 半欧拉图 存在欧拉路径地图 在数学中为简单的图的一笔画完问题,但在有向图里,可以应用到单词接龙判断 判断是否存在欧拉回路 无向图 有向图 混合图 无向图 欧拉回路 连通 每个顶点的入出度是偶数,则存在欧拉回路 欧拉路径 连通 只有两个点地入出度为奇数 这两个点为起点和终点 有向图 欧拉回路 连通 每个顶点的入度等于出度 欧拉路径 连通 某结点入度比出度大1,另一结点出度比入度大1;其余结点入度等于出度 混合图 既有有向图又有无向图 求无向图欧拉回路的算法 1.判断连通有两种方法,dfs和并查集 dfs复杂度O(n^2) 并查集 2.求度 例题 无向图判断欧拉回路 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结 束。 Output 每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。 Sample Input 3 3 1 2 1 3 2 3 3 2

混合图中欧拉回路

≡放荡痞女 提交于 2019-11-26 10:33:35
首先我们来百度一下,欧拉路径以及回路的定义: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。 具有欧拉回路的图称为 欧拉图 (简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。 通俗来说,就是欧拉路径就是图中的每条边经过却只经过一次的路径,而最后回到起点的路径就是欧拉回路。 那给你一个图怎么判断存不存在,欧拉路径或者欧拉回路呢 首先,判断图是不是连通的,这个就很简单了,dfs或者并查集都可以。 然后就是根据定理 欧拉路径的定理 连通的无向图有欧拉路径的充要条件是: G中奇顶点(连接的边数量为奇数的顶点)的数目等于0或者2。 连通的无向图是欧拉环(存在欧拉回路)的充要条件是: G中每个顶点的度都是偶数。 欧拉回路的定理 无向图存在欧拉回路的充要条件 一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。 有向图存在欧拉回路的充要条件 一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图。 这四个定理很好理解,无向图的话,因为要把所有边走一遍且只走一边,那对于每个点来说,如果不是起点或者终点的话,那么度数应该是偶数,有一条进边就有一条对于的出边,然后是起点,出边应该多一条,终点应该入边多一条,所以度数是奇数。然后如果没有奇数点的话,那就是任意点都可以作为起点并且能走回它

欧拉回路之套圈法

醉酒当歌 提交于 2019-11-25 21:05:47
简介 欧拉回路就是给一个图,存在一条回路把所边经过且每条边只经过一次。 存在欧拉回路的条件 对于无向图 : 存在欧拉回路的条件:每个点的度都为偶数; 存在欧拉路的条件:有且只有两个点的度为一,且这两个点分别为起点和终点; 对于有向图 : 存在欧拉回路的条件:每个点出度等于入度; 存在欧拉路的条件:存在一个点出度比入度多一作为起点,存在一点入度比出度多一作为终点,其余点出度等于入度; 套圈法 判断是否存在欧拉回路很好判断,那怎么求欧拉回路呢? 我们采用套圈法,dfs回溯的时候才把边倒着记录。为什么要这样呢? 假如我们随便走,有一条边加一条边,最后回到起始点,会形成一个环。但是我们不能保证没有其他环还没遍历到! 下面拿个图演示一波: 红色为起始点,蓝色为有向边,随便走的话我们可能走完左边的圈就不走了,右边的圈还没走。 而套圈法则是,如果我们遇到分叉点就都走一走,这样能保证每条边都走过,最后倒着加边即可。 注意每条边只走一次,每次走完一条边我们要标记走过,这样就能保证复杂度。 复杂度嘛,每条边只走一次,复杂度是 O ( n + m ) O(n+m) O ( n + m ) 。 下面以洛谷P1127 词链(这是链接) 一题作为例题。 代码如下 #include <cstdio> #include <cstring> #include <algorithm> #include