欧拉路径和欧拉回路
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 4 6 Location: 7 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 4 67 Location: 5 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
Stack: Location: 1 Circuit: 1 5 7 6 4 3 7 2 6 524
来自USACO上的例子 来自USACO上的例子 USACO
Stack: Location: Circuit: 1 5 7 6 4 3 7 2 6 5241
Stack: 1 4 2 5 6 2 7 Location: 3 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 Location: 4 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 4 Location: 6 Circuit: 1
具体步骤
如果此时与该点无相连的点,那么就加入路径 中. 如果该点有相连的点,那么就列一张表,遍历 这些点,直到没有相连的点. 处理当前的点,删出走过的这条边,并在其相 临的点上进行同样的操作.并把删除的点加入 到路径中去. 其实这就是一个递归过程.
但选择起点时要注意.如果所有点的度数为偶 数,那么可以依题意随意选择,都可得到一条 欧拉回路. 如果有的点度数为奇数,那么先判定是否存在 欧拉路径,如果存在,那么起点必须从度数为 奇数的点开始.
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 Location: 2 Circuit: 1 5 7 6 4 3 7 2 6 5
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 Location: 4 Circuit: 1 5 7 6 4 3 7 2 6 52
else { for(int k =0;k<=500;k++) { if(Array[x][k] !=0 ) { Array[x][k]--; Array[k][x]--; match[x]--; match[k]--; solve(k); } } Record[RecordPos] = x; RecordPos++; } }
无向图
每个顶点的入度是偶数,则存在欧拉回路. 证明很简单:其原理就是每个顶点要进去多少 次,就必须出来多少次.如果存在度为奇数的 顶点,那么必有通过某一边进入这一点后,没 有顶点的入度和出度相等. 原理同无向图.也是有多少边进入,就要有多 少边出去. 对于混合图这里就不祥细说明了.
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 Location: 2 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 Location: 7 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
怎么样求欧拉回路
就是循环地找到出发点. 一个解决此类问题基本的想法是从某个节点开 始,然后查出一个从这个点出发回到这个点的 环路径。这种方法保证每个边都被遍历.如果 有某个点的边没有被遍历就让这个点为起点, 这条边为起始边,把它和当前的环衔接上。这 样直至所有的边都被遍历。这样,整个图就被 连接到一起了。
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 4 6 Location: 7 Circuit: 1 5
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 4 Location: 6 Circuit: 1 5 7
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 Location: 7 Circuit: 1 5 7 6 4 3
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 Location: 2 Circuit: 1 5 7 6 4 3 7
Q&A
Stack: 1 4 2 5 Location: 1 Circuit:
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 Location: 5 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 Location: 6 Circuit: 1
来自USACO上的例子 来自USACO上的例子 USACO
考虑左边的图,每个点 的度都为偶数.则存在 欧拉路径.
来自USACO上的例子 来自USACO上的例子 USACO
Stack: Location: 1 Circuit:
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 Location: 4 Circuit:
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 3 Location: 4 Circuit: 1 5 7 6
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 6 2 7 Location: 3 Circuit: 1 5 7 6 4
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 5 Location: 6 Circuit: 1 5 7 6 4 3 7 2
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 Location: 5 Circuit: 1 5 7 6 4 3 7 2 6
混合图
混合图的定义: 有的边是有向的,有的边是无向的。例如城市 里的交通网络,有的路是单行道,有的路是双 行道。 找到一个给每条无向的边定向的策略,使得每 个顶点的入度等于出度,这样就能转换成上面 第二种情况。
关于欧拉路径
源点与汇点不为同一点. 判定一个图是否有欧拉路径. 一个无向图中除源点与汇点的度数为奇数 外,其于点的度数都为偶数,那么则存在欧拉 路径.
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 Location: 2 Circuit:
来自USACO上的例子 来自USACO上的例子 USACO
Stack: 1 4 2 Location: 5 Circuit:
来自USACO上的例子 来自USACO上的例子 USACO
浅谈欧拉路径
5050309760 李冰
欧拉路径和欧拉回路的定义: 欧拉路径和欧拉回路的定义:
一副图,寻找一条只通过每条边一次的路径叫 做欧拉路径.如果这条路径的起点和终点是同 一点,那么这条路径叫做欧拉回路.
怎么样判断是否存在欧拉回路
在以下三种情况中有三种不同的算法: 1.无向图 2.有向图 3.混合图 注:前两种的判定很简单,第三种稍复杂一些, 但是可转化为前两种的情况.(第三种只是简 要说明)
伪代码
find_circuit(node i) { 如果当前结点没有边 将其加入到路径中 否则:while(node i 没有相连的边) { j是与i相临的顶点(即i,j之间有一条边) find_circuit(j); 删除i和j之间的边 } 将i加入路径中去 }
void solve(int x) { if(match[x] == 0) { Record[RecordPos] = x; RecordPos++; }