欧拉回路(Eulerian Path)

1.定义

如果图 G G G(有向图或者无向图)中所有边一次仅且一次行遍所有顶点的通路称作欧拉通路。

如果图 G G G中所有边一次仅且一次行遍所有顶点的回路称作欧拉回路。

具有欧拉回路的图成为欧拉图(简称 E E E图)。具有欧拉通路但不具有欧拉回路的图成为半欧拉图。
顶点可以经过多次
画个图分辨一下:

  • 欧拉通路:
    image
  • 欧拉回路
    image
    简单来讲就是欧拉通路能够从起点到终点,欧拉回路能够回到起点

2.定理及推论

欧拉通路和欧拉回路的判定是很简单的
无向图 G G G存在欧拉通路的充要条件是:
G G G为连通图,并且 G G G仅有两个奇度节点(度数为奇数的顶点)或者无奇度节点
推论1:

  1. G G G是仅有两个奇度节点的连通图时, G G G的欧拉通路必以此两个节点为端点
  2. G G G是无奇度节点的连通图时, G G G必有欧拉回路
  3. G G G为欧拉图(存在欧拉回路)的充分必要条件是 G G G为无奇度节点的连通图

有向图 D D D存在欧拉通路的充要条件是:
D D D为有向图, D D D的基图联通,并且所有顶点的出度与入度都相等;或者除两个顶点外,其余顶点的出度与入度都相等,而在这两个顶点中一个顶点的出度与入度只为 1 1 1,另一个顶点的出度与入度之差为 − 1 −1 1
推论2:

  1. 当 D 除出、入度之差为 1 , − 1 的两个顶点之外,其余顶点的出度与入度都相等时, D 的有向欧拉通路必以出、入度之差为 1 的顶点作为始点,以出、入度之差为 − 1 的顶点作为终点 当D除出、入度之差为1,−1的两个顶点之外,其余顶点的出度与入度都相等时,D的有向欧拉通路必以出、入度之差为1的顶点作为始点,以出、入度之差为−1的顶点作为终点 D除出、入度之差为11的两个顶点之外,其余顶点的出度与入度都相等时,D的有向欧拉通路必以出、入度之差为1的顶点作为始点,以出、入度之差为1的顶点作为终点
  2. 当 D 的所有顶点的出、入度都相等时, D 中存在有向欧拉回路 当D的所有顶点的出、入度都相等时,D中存在有向欧拉回路 D的所有顶点的出、入度都相等时,D中存在有向欧拉回路
  3. 有向图 D 为有向欧拉图的充分必要条件是 D 的基图为连通图,并且所有的顶点的出、入度都相等 有向图D为有向欧拉图的充分必要条件是D的基图为连通图,并且所有的顶点的出、入度都相等 有向图D为有向欧拉图的充分必要条件是D的基图为连通图,并且所有的顶点的出、入度都相等

3.欧拉通路回路存在的判断

根据定理和推论,我们可以很好的找到欧拉通路回路的判断方法

A.判断欧拉通路是否存在的方法#

  • 有向图:图连通,有一个顶点出度大于入度 1 ,有一个顶点入度大于出度 1 ,其余都是出度 = 入度 有向图:图连通,有一个顶点出度大于入度1,有一个顶点入度大于出度1,其余都是出度=入度 有向图:图连通,有一个顶点出度大于入度1,有一个顶点入度大于出度1,其余都是出度=入度
  • 无向图:图联通,只有两个顶点是奇数度,其余都是偶数度

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

  • 有向图:图联通,所有的顶点出度=入度
  • 无向图:图联通,所有的顶点都是偶数度

4.欧拉回路的应用

  1. 哥尼斯堡七桥问题
  2. 一笔画问题
  3. 旋转鼓轮的设计

5.欧拉回路的判断

D F S DFS DFS

邻接矩阵的时间复杂度为 O ( n 2 ) O(n^2) O(n2)
邻接表的时间复杂度为 O ( n + e ) O(n+e) O(n+e)
如果,重边太多的话,邻接表会挂掉:)

请看这篇文章

6.欧拉回路的求解

板子题:骑马修栅栏
传送门
题目保证有解。

A.DFS搜索求解欧拉回路

基本思路:利用欧拉定理判断出一个图存在欧拉回路或欧拉通路后,选择一个正确的起始顶点,用DFS算法遍历所有的边(每条边只遍历一次),遇到走不通就回退。在搜索前进方向上将遍历过的边按顺序记录下来。这组边的排列就组成了一条欧拉通路或回路。

#include <bits/stdc++.h>
using namespace std;
int bian[510],n,m,ans[510];
int mapp[510][510],c=0;
void dfs(int j){for(int i=1;i<=n;i++){if(mapp[j][i]>0){mapp[i][j]--;mapp[j][i]--;dfs(i);}}ans[c++]=j;
}
int main(){cin>>m;int a,b;for(int i=0;i<m;i++){cin>>a>>b;mapp[a][b]++;mapp[b][a]++;bian[a]++;bian[b]++;n=a>n?a:n;n=b>n?b:n;}int flag=1;for(int i=n;i>=1;i--){if(bian[i]%2==1){flag=i;}}dfs(flag);for(int i=c-1;i>=0;i--){cout<<ans[i]<<endl;}
}

B.Fleury(佛罗莱)算法

  • Fleury算法是对DFS爆搜的一种改进,使用DFS漫不经心的随意走效率是不高的,Fleury是一种有效的算法
    ps:其实我也不会,这里就只介绍一下吧
    image
    我个人感觉是把大连通块分成了零散的几个小连通块然后分块连接
    关键是能不走桥就不走桥,实在无路可走了才会去走桥
    代码就不给了,估计给了也是错的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/508293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链媒体发布推广10个热门案例解析-华媒舍

区块链技术的发展已经引起了媒体的广泛关注&#xff0c;越来越多的区块链媒体纷纷发布推广相关的热门案例。本文将介绍10个成功的区块链媒体推广案例&#xff0c;并分享它们的成功秘诀&#xff0c;帮助读者更好地了解区块链媒体推广的方法与技巧。 随着区块链技术的成熟和应用场…

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行 目录 Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行前言1 使用GUI-Guider设计UI1.1 创建工程1.2 设计UI 2 ESP工程导入UI2.1 移植LVGL2.2 移植UI文件2.3 调用UI文件2.4 烧录测试 结束语 前言 GU…

C# 学习第四弹——字符串

一、char类型的使用 字符使用单引号&#xff0c;单个字符 转义字符是一种特殊的字符变量&#xff0c;以反斜线开头&#xff0c;后跟一个或多个字符。 输出多级目录可以使用 二、字符串的声明和初始化 1、引用字符串常量 引用字符串常量初始化——字符使用单引号&#xff0…

SpringMVC--03--前端传数组给后台

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 案例1乘客个人信息方法1&#xff1a;表单提交&#xff0c;以字段数组接收方法2&#xff1a;表单提交&#xff0c;以BeanListModel接收方法3&#xff1a;将Json对象序…

32单片机基础:PWM驱动舵机,直流电机

PWM驱动舵机 接线图如上图所示。注意&#xff0c;舵机的5V 线不能接到面包板上的正极&#xff0c;面包板上的正极只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我们如何驱动舵机呢&#xff1f;由之前我们介绍原理知道&#xff0c;要输出如下图对应的PWM波形才行…

workstation 用途

一 workstation 用途 强大的桌面虚拟化 允许创造多种操作系统可以不用重启就跨不同操作系统进行操作可以提供隔离的安全环境 连接到vsphere 可以远程登陆服务器管理物理主机和虚拟主机任何时间都可登陆提高虚拟机效率 为任何平台开发和测试 1&#xff09;借助一台单一本地…

lua调用C++函数

第一步搭建lua的环境. win10 lua环境搭建-CSDN博客 我使用的环境是win10vs2015lua54 先来个最简单的lua调用C函数, 无参数无返回值的 第一步:定义C函数. int CTest(lua_State* L) // 返回值是固定的int类型,返回0表示没有返回参数,返回1表示有一个返回参数 {std::cout &l…

【学习心得】响应数据加密的原理与逆向思路

一、什么是响应数据加密&#xff1f; 响应数据加密是常见的反爬手段的一种&#xff0c;它是指服务器返回的不是明文数据&#xff0c;而是加密后的数据。这种密文数据可以被JS解密进而渲染在浏览器中让人们看到。 它的原理和过程图如下&#xff1a; 二、响应数据加密的逆向思路 …

安装OneNote for Win10 | Win10/Win11

前言 PC端的OneNote分为2个版本&#xff0c;分别是Microsoft Store版本和Office版本&#xff0c;Microsoft Store版本即为OneNote for Win10&#xff0c;此版的OneNote有最近笔记功能&#xff0c;但检索功能不如Office版本&#xff0c;个人认为2个版本各有优劣。 但OneNote f…

Flink:Temporal Table Function(时态表函数)和 Temporal Join

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

Skipped breakpoint at because it happened inside debugger evaluation亲测可用

问题描述&#xff1a; 在多线程项目中&#xff0c;在idea中打断点时&#xff0c;有时会遇到下面这种情况&#xff1a; idea左下角出现一行红底或者绿底文字提示&#xff1a; Skipped breakpoint at because it happened inside debugger evaluation 然后我们能感受到的就是…

Linux工具篇

文章目录 1.yum1.1 yum是什么&#xff1f;1.2yum下载的软件包在哪&#xff1f;1.3 yum的配置1.4 yum的相关操作 2. Vim2.1 各种模式的相关操作2.2 利用vim解决普通用户无法sudo的问题2.3 vim的配置 3.gcc/g3.1 利用gcc理解程序的翻译过程3.2 编译器的自举 4. 程序的链接4.1动态…