浅谈欧拉图(欧拉路径)
定义
通过图中所有边恰好一次的通路称为欧拉通路。
通过图中所有边恰好一次的回路称为欧拉回路。
具有欧拉回路的无向图或有向图称为欧拉图。
具有欧拉通路但不具有欧拉回路的无向图或有向图称为半欧拉图。
非形式化地讲,欧拉图就是从任意一个点开始都可以一笔画完整个图,半欧拉图必须从某个点开始才能一笔画完整个图。
性质
欧拉图中所有顶点的度数都是偶数。
判别法
对于无向图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; }
浅谈欧拉图(欧拉路径)相关推荐
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 【大话设计模式】——浅谈设计模式基础
初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...
- 学校计算机机房好处,浅谈学校计算机机房维护
浅谈学校计算机机房维护 现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...
- 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)
震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...
- 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...
- 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...
最新文章
- 汇总|计算机摄影学资源,涉及视频、书籍以及国内外著名实验室
- Debian 系统初体验
- SimplifiedHibernate:简化了的Hibernate
- Quartus使用技巧(一些常用的方法)
- maven手动添加第三方的jar包
- css解决li边框重合问题
- NOIP2007 count 统计数字
- Django之templates模板
- 逆序对(洛谷-P1908)
- CORS - 引入预检请求的动机是什么?
- python 字节字符串_Python字符串转换为字节,字节转换为字符串
- 21矩阵——Schur分解定理、酉相似下的标准型、Hermite正定矩阵、正规矩阵
- webview是什么东西_做性能优化前需要考虑什么?
- 【把P2P进行到底:讲述Jxta的故事(2)】
- 如何使非域模式下的组策略对管理员帐号无效
- postSQL hash分表
- 制作一份简单的网络地图(世博地图的配准和切割)
- liunx开启Nginx失败, 出现 An error occurred
- UEFI shell - 脚本文件
- 摩尔纹的原理与产生条件
热门文章
- mac home brew 安装不同版本的gradle
- 《原创lightroom 4中文视频教程【高清包】》(lightroom4 video tutorials)更新至22集[MP4]
- Blackadder
- 【Lucene】三个高亮显示模块的简单示例-Highlighter
- VS10x Method Block Highlighter插件
- 《嵌入式 - Lwip开发指南》第1章 LWIP概述
- html5 判断图片 exif,前端获取图片 exif 流信息
- 无需路由器实现虚拟机、物理机、开发板互相ping通+上网
- SpringCloudAlibaba系列微服务搭建笔记一_Nacos
- 027-2018-1015 服务端,客户端,socket