其他分享
首页 > 其他分享> > 构造题与欧拉回路

构造题与欧拉回路

作者:互联网

欧拉回路与欧拉路径

(有向图/无向图的)欧拉路径是一条路径,满足其经过所有边恰好一次。欧拉回路是起点和终点相同的一条欧拉路径。欧拉通路是起点和终点不同的一条欧拉路径。

有向图存在欧拉回路:将边看成无向边后图联通,且所有点入度均等于出度。

有向图存在欧拉通路:将边看成无向边后图联通,且除两个点外,所有点入度均等于出度。那两个点中,其中一个出度比入度大 \(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