首页 > 其他分享 >欧拉回路

欧拉回路

时间:2024-06-04 21:22:04浏览次数:17  
标签:int 入度 度非 当且 回路 欧拉

概念

1.经过图中所有边恰好一次的通路称为欧拉通路或欧拉路(起点终点可以不一致)
2.经过图中所有边恰好一次的回路称为欧拉回路(起点终点一致)
3.判别方法:对于无向图G,G中存在欧拉回路当且仅当G中所有度非0的点是连通的且没有奇数度数的点
对于无向图G,G中存在欧拉路当且仅当G中所有度非0的点是连通的且G中恰好有0个或2个奇数度数的点(0个表示存在欧拉回路)
对于有向图G,G中存在欧拉回路当且仅当G中所有度非0的点是强联通的且每个点的入度等于出度
对于有向图G,G中存在欧拉路当且仅当:
1)将G中所有有向边改为无向边后,G中所有度非0的点是连通的
2)最多只有一个点出度减入度为1;
3)最多只有一个点入度减出度为1;
4)其他所有点的入度等于出度

求欧拉图流程



首先从C开始:
C->D->E->F:走到头了,那么把F加入到路径中
回溯:C->D->E->B->A->D->G->H->E,走到头了
E加入到路径中,回溯H加入路径,G,D,A,B,E,D,C依次回溯加入到路径去
最终路径中存的是:
F <- E <- H <- G <- D <- A <- B <- E <- D <- C
倒序输出即为所求的欧拉通路
代码实现,有向图版本:

vector<int> edges[N+1];
int n,m,l,f[N+1],ind[N+1],outd[N+1],c[M+2];

void dfs(int x){
	int len=edge[x].size();
	//因为从头到尾一个点可能被枚举到很多次,所以可以记录这个点枚举到了哪里
	for(;f[x]<len;){ 
		int y=edge[x][f[x]]; 
		f[x]++;
		dfs(y);
		c[++l]=y;//记录路径信息(在c中倒序依次输出,即为欧拉路)
		/*
		比如c={1,2,3,4,1};
		那么 1->4->3->2->1即为要求的欧拉路径 
		*/ 
	}
}

void Euler(){
	int x=0,y=0,z=0;//x是起点,y是有多少个点的出度比入度大1,z表示有多少个点出度不等于入度 
	for(int i=1;i<=n;i++){
		if(ind[i]+1==outd[i]){
			x=i,++y;
		}
		if(ind[i]!=outd[i]){
			++z;
		}
	}
	//!z所有点的出度都能与入度或有一个点的出度比入度大1并且有两个点的出度不等于入度,这样就有欧拉路 
	if(!((y==1&&z==2)||!z)){
		cout<<"NO"<<endl;
		return ;
	} 
	//如果起点还没找到,随便找一个度非0的点就行了 
	if(!x){
		for(int i=1;i<=n;i++)
		if(ind[i]) x=i;
	}
	memset(f,0,sizeof f);
	l=0;
	dfs(x);
	c[++l]=x;//x为最终的起点,所以要加到路径里面去
	cout<<"YES"<<endl;
	for(int i=l;i;--i) cout<<c[i]<<" "; 
}

标签:int,入度,度非,当且,回路,欧拉
From: https://www.cnblogs.com/mendax-Z/p/18231771

相关文章

  • 离散数学求图的回路和通路(基于邻接表,递归算法)
    网上大多是二维矩阵和循环算法,本篇则是基于邻接表的递归算法求图的回路和通路。代码如下:#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#defineok1#defineerror0#definemax255typedefcharelemtype;intcnt[5]=......
  • 欧拉Openeuler安装k8s1.24.6
    一、环境[root@tax-k8s-work03~]#cat/etc/os-releaseNAME="HuaweiCloudEulerOS"VERSION="2.0(x86_64)"ID="hce"VERSION_ID="2.0"PRETTY_NAME="HuaweiCloudEulerOS2.0(x86_64)"ANSI_COLOR="0;31"[r......
  • 欧拉函数(新)
    欧拉函数\(\varphi\)的定义,\(\varphi(i)\)表示从\([1,i]\)之间和\(i\)互质的数的数量(\(a\)和\(b\)互质即\(\gcd(a,b)=1\))。欧拉函数是积性函数,例如\(a,b\)都为质数,那么\(φ(ab)=φ(a)\timesφ(b)\),递推式为\[φ(ab)=\frac{φ(a)\timesφ(b)\times......
  • 欧拉定理/扩展欧拉定理应用
    定理不会证所以直接讲应用。CF776ETheHolmesChildren随便证一下(打表)得,\(f\)函数为欧拉函数,那么\(g(n)=n\),模拟大\(F\)函数得到答案。时间复杂度证明发现大$F$函数在算一个套娃$\phi$值。由于欧拉函数值必为偶数,小于偶数\(x\)的所有偶数定与\(x\)不互质,所以我......
  • 欧拉函数
    一、欧拉函数定义\([1,n]\)中与\(n\)互质的数的个数,称为欧拉函数,记为\(\varphi(n)\)。互质的定义:对于正整数\(a\)和\(b\),若\(gcd(a,b)=1\),则\(a\)和\(b\)互质。性质若\(p\)是质数,则\(\varphi(p)=p-1\)。证:因为\(p\)是质数,所以因数只有\(1\)和\(p\)。......
  • 欧拉函数、整除分块和扩展欧几里得
    欧拉函数欧拉函数(写作\(\varphi(x)\)),表示\(i\in[1,x]且\gcd(i,x)=1\)的\(i\)的数量。乍一看好像很难求,但我们先考虑最简单的情况,即\(x\in\mathbb{P}\)(\(\mathbb{P}\)表示质数集)的情况。首先很容易看出\(\varphi(x)=x-1\),因为\(x\in\mathbb{P}\),所以\(\foralli......
  • 上百页html生成pdf解决方案(bookjs-easy)简洁完整版(包含接收服务端返回路径参数)
    依靠1:客户端插件 bookjs-easy(点击直接跳转官网)2:服务端插件screenshot-api-server实测105页的pdf,生成耗时40s左右,文件大小16MB项目需求:生成一个上百页的pdf,这个pdf包含表格、折线图、图片等,且横竖幅页面交叉 bookjs-easy官网的文档对于第一次看的人来说并不友好(建议第......
  • 欧拉函数
    1欧拉函数的定义和性质欧拉函数定义:\(\varphi(n)\)定义为不超过\(n\)且与\(n\)互质的正整数的个数。\[\varphi(n)=\sum\limits_{i=1}^n[gcd(n,i)=1]\]例如,\(n=4\)时,有\(1,3\)与\(4\)互质,因此\(\varphi(4)=2\);\(n=9\)时,有\(1,2,4,5,7,8\)与\(9\)互质,因此\(\v......
  • 阿里云CTF逆向题“欧拉”详细Writeup
    题目来源:阿里云CTF题目类型:逆向题目描述:欧拉欧拉欧拉欧拉![attachment](Euler.exe)题目解析:使用IDA打开,F5,整体先看一遍,100多行,没有混淆先看变量定义这里:charStr1[16];//[rsp+20h][rbp-40h]BYREF__int128v21;//[rsp+30h][rbp-30h]__int128v22;//[rsp+40h][r......
  • 欧拉函数 整除分块 扩展欧几里得
    欧拉函数\(\varphi(x)\)表示求出\(1\ley\lex,\gcd(x,y)=1\)的\(y\)的数量。对于一个质数\(p\),\(\varphi(p)=p-1\)\(\varphi(p^2)=p^2-\frac{p^2}{p}=p^2-p\)\(\dots\)\(\varphi(p^i)=p^i-p^{i-1}=(p-1)\cdotp^{i-1}\)......