当前位置:文档之家› 欧拉路径和欧拉回路PPT学习课件

欧拉路径和欧拉回路PPT学习课件

如果有的点度数为奇数,那么先判定是否存在 欧拉路径,如果存在,那么起点必须从度数为 奇数的点开始.
10
来自USACO上的例子
考虑左边的图,每个点 的度都为偶数.则存在 欧拉路径.
11
来自USACO上的例子
Stack: Location: 1 Circuit:
12
来自USACO上的例子
8
具体步骤
如果此时与该点无相连的点,那么就加入路径 中.
如果该点有相连的点,那么就列一张表,遍历 这些点,直到没有相连的点.
处理当前的点,删出走过的这条边,并在其相 临的点上进行同样的操作.并把删除的点加入 到路径中去.
其实这就是一个递归过程.
9
但选择起点时要注意.如果所有点的度数为偶 数,那么可以依题意随意选择,都可得到一条 欧拉回路.
但是可转化为前两种的情况.(第三种只是简 要说明)
3
无向图
每个顶点的入度是偶数,则存在欧拉回路. 证明很简单:其原理就是每个顶点要进去多少
次,就必须出来多少次.如果存在度为奇数的 顶点,那么必有通过某一边进入这一点后,没 有边可以出去,这样就不会有回路.
4
有向图
每个顶点的入度和出度相等. 原理同无向图.也是有多少边进入,就要有多
{

if(match[x] == 0)

Hale Waihona Puke {Record[RecordPos] = x;

RecordPos++;
}

39
else {
for(int k =0;k<=500;k++) {
if(Array[x][k] !=0 ) {
16
来自USACO上的例子
Stack: 1 4 2 Location: 5 Circuit: 1
17
来自USACO上的例子
Stack: 1 4 2 5 Location: 6 Circuit: 1
18
来自USACO上的例子
Stack: 1 4 2 5 6 Location: 2 Circuit: 1
19
来自USACO上的例子
Stack: 1 4 2 5 6 2 Location: 7 Circuit: 1
20
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 Location: 3 Circuit: 1
21
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 Location: 4 Circuit: 1
37
伪代码
find_circuit(node i) { 如果当前结点没有边
将其加入到路径中 否则:while(node i 没有相连的边)
{ j是与i相临的顶点(即i,j之间有一条边) find_circuit(j); 删除i和j之间的边
} 将i加入路径中去 }
38
void solve(int x)
浅谈欧拉路径
5050309760 李冰
1
欧拉路径和欧拉回路的定义:
一副图,寻找一条只通过每条边一次的路径叫 做欧拉路径.如果这条路径的起点和终点是同 一点,那么这条路径叫做欧拉回路.
2
怎么样判断是否存在欧拉回路
在以下三种情况中有三种不同的算法: 1.无向图 2.有向图 3.混合图 注:前两种的判定很简单,第三种稍复杂一些,
34
来自USACO上的例子
Stack: 1 Location: 4 Circuit: 1 5 7 6 4 3 7 2 6 52
35
来自USACO上的例子
Stack: Location: 1 Circuit: 1 5 7 6 4 3 7 2 6 524
36
来自USACO上的例子
Stack: Location: Circuit: 1 5 7 6 4 3 7 2 6 5241
25
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 4 6 Location: 7 Circuit: 1 5
26
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 4 Location: 6 Circuit: 1 5 7
27
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 Location: 4 Circuit: 1 5 7 6
外,其于点的度数都为偶数,那么则存在欧拉 路径.
7
怎么样求欧拉回路
就是循环地找到出发点. 一个解决此类问题基本的想法是从某个节点开
始,然后查出一个从这个点出发回到这个点的 环路径。这种方法保证每个边都被遍历.如果 有某个点的边没有被遍历就让这个点为起点, 这条边为起始边,把它和当前的环衔接上。这 样直至所有的边都被遍历。这样,整个图就被 连接到一起了。
31
来自USACO上的例子
Stack: 1 4 2 5 Location: 6 Circuit: 1 5 7 6 4 3 7 2
32
来自USACO上的例子
Stack: 1 4 2 Location: 5 Circuit: 1 5 7 6 4 3 7 2 6
33
来自USACO上的例子
Stack: 1 4 Location: 2 Circuit: 1 5 7 6 4 3 7 2 6 5
Array[x][k]--; Array[k][x]--; match[x]--; match[k]--; solve(k); }
} Record[RecordPos] = x; RecordPos++; } }

Q&A
40
22
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 4 Location: 6 Circuit: 1
23
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 4 6 Location: 7 Circuit: 1
24
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 3 4 67 Location: 5 Circuit: 1
少边出去. 对于混合图这里就不祥细说明了.
5
混合图
混合图的定义: 有的边是有向的,有的边是无向的。例如城市
里的交通网络,有的路是单行道,有的路是双 行道。 找到一个给每条无向的边定向的策略,使得每 个顶点的入度等于出度,这样就能转换成上面 第二种情况。
6
关于欧拉路径
源点与汇点不为同一点. 判定一个图是否有欧拉路径. 一个无向图中除源点与汇点的度数为奇数
Stack: 1 Location: 4 Circuit:
13
来自USACO上的例子
Stack: 1 4 Location: 2 Circuit:
14
来自USACO上的例子
Stack: 1 4 2 Location: 5 Circuit:
15
来自USACO上的例子
Stack: 1 4 2 5 Location: 1 Circuit:
28
来自USACO上的例子
Stack: 1 4 2 5 6 2 7 Location: 3 Circuit: 1 5 7 6 4
29
来自USACO上的例子
Stack: 1 4 2 5 6 2 Location: 7 Circuit: 1 5 7 6 4 3
30
来自USACO上的例子
Stack: 1 4 2 5 6 Location: 2 Circuit: 1 5 7 6 4 3 7
相关主题