定义

通过图中所有边恰好一次的通路称为欧拉通路。

通过图中所有边恰好一次的回路称为欧拉回路。

具有欧拉回路的无向图或有向图称为欧拉图。

具有欧拉通路但不具有欧拉回路的无向图或有向图称为半欧拉图。

非形式化地讲,欧拉图就是从任意一个点开始都可以一笔画完整个图,半欧拉图必须从某个点开始才能一笔画完整个图。

性质

欧拉图中所有顶点的度数都是偶数。

判别法

对于无向图G,G是欧拉图当且仅当  是连通的且没有奇度顶点。

对于无向图G,G是半欧拉图当且仅当G是连通的且G中恰有0个或2个奇度顶点。

对于有向图G,G是欧拉图当且仅当G的所有顶点属于同一个强连通分量且每个顶点的入度和出度相同。

对于有向图G,G是半欧拉图当且仅当

  • 如果将G中的所有有向边退化为无向边时,那么G的所有顶点属于同一个连通分量。
  • 最多只有一个顶点的出度与入度差为1。
  • 最多只有一个顶点的入度与出度差为1。
  • 所有其他顶点的入度和出度相同。

上述有向图G且G为半欧拉图可以简单说为满足以下两个性质其中之一即可

1.有向图G中所有顶点的入度与出度相等

2.有向图G中有且只有一个顶点的入度为其出度+1(该点为终点),并且有且只有一个顶点的出度为其入度+1(该点为起点),其他点的入度与出度相等

求解欧拉路径可以使用Fleury算法(避桥法)时间复杂度为O(),可用性不大

一般求解欧拉路径使用Hierholzer算法(逐步插入回路法),不求字典序最小的欧拉路径时的时间复杂度为O(n+m),求字典序最小的欧拉路径时,需要对每个点所能到达的点进行从小到大排序,因此时间复杂度为O(n+mlogm)

【模板】欧拉路径 - 洛谷

求解字典序最小的欧拉路径

AC代码:

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m;cin >> n >> m;vector<vector<int>> G(n + 1);vector<int> in(n + 1), out(n + 1);for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;G[u].push_back(v);out[u]++;in[v]++;}int st = -1, end = -1, zz;bool ok = true;for (int i = 1; i <= n; i++) {if (in[i] == out[i]) {zz = in[i];continue;}else {if (in[i] == out[i] + 1 and end == -1) {end = i;}else if (out[i] == in[i] + 1 and st == -1) {st = i;}else {ok = false;break;}}}if (!ok) {cout << "No\n";exit(0);}for (int i = 1; i <= n; i++) {sort(G[i].begin(), G[i].end());}if (st == -1) {st = 1;}stack<int> sta;vector<int> cur(n + 1);function<void(int)> dfs = [&](int x) {int len = G[x].size();for (int i = cur[x]; i < len; i = cur[x]) {cur[x] = i + 1;dfs(G[x][i]);}sta.push(x);};dfs(st);while (!sta.empty()) {cout << sta.top() << ' ';sta.pop();}return 0;
}

浅谈欧拉图(欧拉路径)相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  3. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  4. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  5. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  6. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

最新文章

  1. 汇总|计算机摄影学资源,涉及视频、书籍以及国内外著名实验室
  2. Debian 系统初体验
  3. SimplifiedHibernate:简化了的Hibernate
  4. Quartus使用技巧(一些常用的方法)
  5. maven手动添加第三方的jar包
  6. css解决li边框重合问题
  7. NOIP2007 count 统计数字
  8. Django之templates模板
  9. 逆序对(洛谷-P1908)
  10. CORS - 引入预检请求的动机是什么?
  11. python 字节字符串_Python字符串转换为字节,字节转换为字符串
  12. 21矩阵——Schur分解定理、酉相似下的标准型、Hermite正定矩阵、正规矩阵
  13. webview是什么东西_做性能优化前需要考虑什么?
  14. 【把P2P进行到底:讲述Jxta的故事(2)】
  15. 如何使非域模式下的组策略对管理员帐号无效
  16. postSQL hash分表
  17. 制作一份简单的网络地图(世博地图的配准和切割)
  18. liunx开启Nginx失败, 出现 An error occurred
  19. UEFI shell - 脚本文件
  20. 摩尔纹的原理与产生条件

热门文章

  1. mac home brew 安装不同版本的gradle
  2. 《原创lightroom 4中文视频教程【高清包】》(lightroom4 video tutorials)更新至22集[MP4]
  3. Blackadder
  4. 【Lucene】三个高亮显示模块的简单示例-Highlighter
  5. VS10x Method Block Highlighter插件
  6. 《嵌入式 - Lwip开发指南》第1章 LWIP概述
  7. html5 判断图片 exif,前端获取图片 exif 流信息
  8. 无需路由器实现虚拟机、物理机、开发板互相ping通+上网
  9. SpringCloudAlibaba系列微服务搭建笔记一_Nacos
  10. 027-2018-1015 服务端,客户端,socket