构造题与欧拉回路
作者:互联网
欧拉回路与欧拉路径
(有向图/无向图的)欧拉路径是一条路径,满足其经过所有边恰好一次。欧拉回路是起点和终点相同的一条欧拉路径。欧拉通路是起点和终点不同的一条欧拉路径。
有向图存在欧拉回路:将边看成无向边后图联通,且所有点入度均等于出度。
有向图存在欧拉通路:将边看成无向边后图联通,且除两个点外,所有点入度均等于出度。那两个点中,其中一个出度比入度大 \(1\),作为欧拉通路的起点。另一个入度比出度大 \(1\),作为欧拉通路的终点。
无向图存在欧拉回路:所有点度数均为偶数。
无向图存在欧拉通路:除两个点度数为奇数外,所有点度数均为偶数。那两个点中,一个作为欧拉通路之起点,另一个作为终点。
构造欧拉回路可以直接 \(\text{dfs}\),具体来说,我们不断找环,用栈合并即可。
无向图欧拉回路:
void dfs(int x){
vis[x]=1;
for(int &i=head[x];i;i=ne[i]){
if(~ans[i>>1])continue;
int u=ver[i];
ans[i>>1]=(i&1);dfs(u);
}
}
有向图欧拉回路:
void dfs(int x){
for(int &i=head[x];i;i=ne[i]){
if(vis[i])continue;vis[i]=1;
int u=ver[i];
dfs(u);ans.push_back(make_pair(x,u));
}
}
标签:通路,int,dfs,有向图,构造,回路,欧拉 来源: https://www.cnblogs.com/A-Quark/p/16559069.html