欧拉回路简要笔记
欧拉回路简要笔记
补一补一直不熟悉的一个知识点
概念与判定
定义
- 欧拉路径:一个路径被称为欧拉路径,当且仅当这条路径经过每条边恰好一次且经过了所有的点(点可以多次经过)
- 欧拉回路:起点与终点重合的欧拉路径是欧拉回路
- 欧拉图:有欧拉回路的图是欧拉图
- 半欧拉图:只有欧拉路径而没有欧拉回路的图是半欧拉图
- 奇点:无向图中度数为奇数的店
- 偶点:无向图中度数为偶数的点
- 基图:有向图去掉边的方向形成的无向图
判定
无向图
- 无向图存在欧拉回路(为欧拉图),当且仅当其连通,且奇点个数为 \(0\)。
- 无向图存在欧拉路径且不存在欧拉回路(为半欧拉图),当且仅当其连通,且其存在两个奇点且其它点均为偶点。这两个奇点为这条欧拉路径的起点和终点。
有向图
- 有向图存在欧拉回路,当且仅当当且仅当其基图连通,且所有的点的入度与出度相同。
- 有向图存在欧拉路径且不存在欧拉回路,当且仅当其当且仅当其基图连通,且存在一个点出度比入度大 \(1\)(起点),一个点入度比出度大 \(1\)(终点),且其它点出度与入度相同。
求欧拉回路 / 欧拉路径
该代码既能求欧拉回路,也能求欧拉路径。
void euler(int u,int id)
{
for(int &i=h[u];i;i=nxt[i])
{
if(use[i]) continue;
use[i]=use[i^1]=1;
euler(to[i],num[i]);
}
//id是一条边
}

浙公网安备 33010602011771号