欧拉回路

简介: 欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。 判断欧拉路是否存在的方法     有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。

欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。

判断欧拉路是否存在的方法  

  有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。

  无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。

  

  定理:无向图G具有一条欧拉路,当且仅当G是连通的,且有0个或者是两个奇数度得结点。  

  推论:无向图G具有一条欧拉回路,当且仅当G是连通的,并且所有结点的度数均为偶数。

 

判断欧拉回路是否存在的方法  

  有向图:图连通,所有的顶点出度=入度。

  无向图:图连通,所有顶点都是偶数度。

 

  定理:有向图G具有 单向欧拉路,当且仅当它是连通的,而且除两个结点外,每个结点的入度等于出度,但这两个结点中,一个结点的入度比出度大1,另一个结点的入度比出度小1。  

  定理:有向图G具有一条单向欧拉回路,当且仅当是连通的,且每个结点入度等于出度。

 

  程序实现一般是如下过程:

  1.利用并查集判断图是否连通,即判断p[i] < 0的个数,如果大于1,说明不连通。

  2.根据出度入度个数,判断是否满足要求。

  3.利用dfs输出路径。

 

  找欧拉回路:根据DFS(边)的性质,回溯是记录,可以求出欧拉回路。有向图与无向图的区别就是在DFS时,要标记的边,有向图标记一条就足以,而无向图需要将两条都标记。找欧拉通路原理与回路相同,代码也相同。

 1 #include<iostream>
 2 #include <cstring>
 3 #include<queue>
 4 using namespace std;
 5 
 6 int first[100];
 7 int next[100];
 8 int v[100];
 9 int d[100];
10 int vis[100];
11 int times;
12 int n,m;
13 
14 void dfs(int start)
15 {
16     int i,j,k;
17     for(k=first[start]; k!=-1; k=next[k])
18     {
19         if(vis[k]==0)
20         {
21             vis[k]=1;
22             dfs(v[k]);
23             int temp1=k%m;
24             if(k%m==0)
25                 temp1=m;
26             d[times++]=temp1;
27         }
28     }
29 }
30 int main()
31 {
32     int i,j,k;
33     while(cin>>n>>m)
34     {                                     
35         memset(first,-1,sizeof(first));
36         memset(next,-1,sizeof(next));
37         memset(vis,0,sizeof(vis));
38         times=1;
39         d[0]=-1;
40         int temp1,temp2,temp3;
41         for(i=1; i<=m; i++)
42         {            
43             cin>>temp1>>temp2;             
44             if(first[temp1]==-1)
45             {
46                 first[temp1]=i;
47             }
48             else
49             {
50                 temp3=first[temp1];
51                 first[temp1]=i;
52                 next[i]=temp3;
53             }
54             v[i]=temp2;
55         }     
56         dfs(1);                                                   
57         for(i=1; i<times; i++)                         
58             cout<<d[i]<<" ";
59         cout<<endl;
60     }
61     return 0;
62 }
63   

 

目录
相关文章
|
存储 网络协议 Ubuntu
【C++网络编程】Socket基础:网络通讯程序入门级教程
【C++网络编程】Socket基础:网络通讯程序入门级教程
376 7
|
9月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
344 5
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
2431 18
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
11月前
|
人工智能 安全 Linux
|
11月前
|
存储 人工智能 安全
【通义】AI视界|苹果停止签署iOS 18.0.1,升级用户无法降级
本文由通义自动生成,涵盖24小时内精选的五条科技资讯:奥特曼谈OpenAI未来发展方向,ChatGPT新搜索功能上线遇故障,Perplexity AI选举搜索面临挑战,马斯克谈特斯拉造手机的可能性,以及苹果停止签署iOS 18.0.1。更多精彩内容,欢迎访问通通知道。
|
容器 Docker Linux
如何将当前用户添加到Docker组?
【7月更文挑战第25天】
1391 2
如何将当前用户添加到Docker组?
|
算法 数据挖掘 BI
【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 39页论文及python代码
本文介绍了一种基于计算机配色理论的数学模型,旨在解决不透明制品的最优配色方案设计问题,通过线性回归分析、色差计算和多目标规划模型,实现了高效、准确的配色方案优化。
251 0
|
编解码 开发者 Python
【Python】已解决:UnicodeEncodeError: ‘utf-8’ codec can’t encode characters in position 42-43: surrogates
【Python】已解决:UnicodeEncodeError: ‘utf-8’ codec can’t encode characters in position 42-43: surrogates
1778 0
|
移动开发 Unix Linux
vscode 换行符\n 变成\r\n
VSCode是一个开源的强大代码编写器,但是如果没有好好的配置使用,会适得其反。 这里总结VSCode的一些配置,方便自己查询,也方便网友。 1、编辑器配置 为特定类型文件指定缩进大小、缩进类型(空格,或tab),是否自动插入末行等等。
7510 0
|
存储 数据库 索引
聚簇索引与非聚簇索引
聚簇索引和非聚簇索引是关系数据库中常用的两种索引类型。它们在数据存储和索引组织方式上存在一些区别。下面将详细介绍聚簇索引和非聚簇索引的定义、特点以及适用场景。
605 0