图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集
欧拉图性质:
1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数);
2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点;
3.有向连通图D是欧拉图,当且仅当该图为连通图且D中每个结点的入度=出度;
4.有向连通图D含有欧拉通路,当且仅当该图为连通图且D中除两个结点外,其余每个结点的入度=出度,且此两点满足deg-(u)-deg+(v)=±1。(起始点s的入度=出度-1,结束点t的出度=入度-1 或两个点的入度=出度);
对于欧拉图问题,有如下解决问题的方法:
1.Eular算法(欧拉算法),欧拉问题最标准的算法。
2.Fluery算法(佛罗莱算法),欧拉问题最广泛的算法
3.Hierholzer (希霍尔泽算法应该是这么翻译)又叫逐步插入回路法,高效的算法。
4.DFS算法,暴力无脑解题算法,虽然Fluery,Euler也是递归实现。这个我看看又看了看,确实跟Euler没区别,跟Hierholzer也没区别
5.并查集算法,网络流解混合图的时候可以使用。https://blog.csdn.net/liyanfeng1996/article/details/52767039
以上是网上的各种说法的总结,也就是只有这3种做法,暴力的搜索(1,3,4)
1.对于第一种方法只要有欧拉路径或者欧拉回路,就可以使用,应该是可以用于无向图的,不过使用前需要判断节点的度,是否存在,复杂度有点高,也不用避免隔什么的感觉跟DFS很像,简单的题暴力就完事了。

就是暴力,能走就走,不能走就不走,然后从小号到最大号遍历,也就保证了路径的序号为字典序最小的情况。
模板:
int g[510][510];
stack<int> s;
int d[510];
void euler(int u)
{
for(int v=1; v<=500; v++)
{
if(g[u][v])
{
g[u][v]--;
g[v][u]--;
euler(v);
s.push(v);
}
}
}
int main()
{
int u,v;
int n;
cin>>n>>m;// 点,边
for(int i=1; i<=m; i++)
{
cin>>u>>v;
g[u][v]++;
g[v][u]++;
d[u]++;
d[v]++;
}
int flag=1;
int cnt=0;
for(int i=n; i>=1; i--)
if(d[i]%2)
{
flag=i;
cnt++;
}
if(cnt>2)
{
cout<<"No Euler"<<endl;
return 0;
}
euler(flag);
s.push(flag);
while(!s.empty())
{
cout<<s.top()<<endl;
s.pop();
}
}
void fleury(int s){
bool flag;
st.push(s);
while(!st.empty()){
flag = 0;
for(int i = 1; i <= n; i++){
if(edge[st.top()][i] > 0){
flag = 1; break;
}
}
if(flag){
int x = st.top();
st.pop();
dfs(x);
}
else{
printf("%d ",st.top());
st.pop();
}
}
图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集的更多相关文章
- B树和B+树的插入、删除图文详解(good)
B树和B+树的插入.删除图文详解 1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数 ...
- B树和B+树的插入、删除图文详解
简介:本文主要介绍了B树和B+树的插入.删除操作.写这篇博客的目的是发现没有相关博客以举例的方式详细介绍B+树的相关操作,由于自身对某些细节也感到很迷惑,通过查阅相关资料,对B+树的操作有所顿悟,写下 ...
- 转:B树和B+树的插入、删除图文详解
如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了 ...
- nyoj 42-一笔画问题 (欧拉图 && 并查集)
42-一笔画问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:25 题目描述: zyc从小就比较喜欢玩一些小游戏,其中就包括画 ...
- 欧拉图 欧拉回路 欧拉通路 Euler
欧拉图 本文链接:http://www.cnblogs.com/Ash-ly/p/5397702.html 定义: 欧拉回路:图G的一个回路,如果恰通过图G的每一条边,则该回路称为欧拉回路,具有欧拉回 ...
- 欧拉图 欧拉回路 欧拉通路 Euler的认识 (转)
转:https://www.cnblogs.com/Ash-ly/p/5397702.html 定义: 欧拉回路:图G的一个回路,如果恰通过图G的每一条边,则该回路称为欧拉回路,具有欧拉回路的图称为欧 ...
- HDU1878 欧拉回路---(并查集+图论性质)
http://acm.hdu.edu.cn/showproblem.php?pid=1878 欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- nyist 42 一笔画 (欧拉回路 + 并查集)
nyoj42 分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径. 若该路径是一个圈,则称为欧拉(Euler)回路. 具有欧拉回路的图称为欧拉图(简称E图).具有欧拉路 ...
- hdu3018 Ant Trip (并查集+欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题意:给你一个图,每条路只能走一次.问至少要多少个人才能遍历所有的点和所有的边. 这是之前没有接 ...
随机推荐
- MySQL入门,第四部分,学会创建、删除表
一.列完整性约束 列完整性约束:是指对某一列设置的约束条件.该列上的数据必须满足.最常见的有: NOT NULL 该列值不能为空 NULL 该列值可以为空 UNIQUE 该列值不能存在相同 DEFA ...
- Vue生成分享海报(含二维码)
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 功能需求: 海报有1张背景 ...
- Linux CentOS7 开通端口外网端口访问权限
一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常)firewall-cmd --state二.开启端口外网访问1.添加端口 返回 success 代表成功(--permanent永 ...
- javascript - 所有的视图属性和方法(offsetHeight、clientHeight、scrollHeight、innerHeight等)
注意:本文只简单的介绍了各个视图的属性和方法.如果想要知道兼容性或者更多,请至文章底部参考链接处. 本文内容分为五大部分: Window视图属性 innerHeight 和 innerWidth ou ...
- Pandownload作者被抓之后
近日,pandownload作者被抓,可以说是圈内的大事件,被抓之后, Pandownload 已经是打不开,用不了了 就在我为此感到惋惜的时候,竟然有出来个shengdownload 先来一块看看这 ...
- Say goodbye
Since September 28th 2015 Scriptogram officially closed. We considered every option before making th ...
- Python 实用冷门知识整理
1.print 打印带有颜色的信息 大家知道 Python 中的信息打印函数 print,一般我们会使用它打印一些东西,作为一个简单调试. 但是你知道么,这个 Print 打印出来的字体颜色是可以设置 ...
- synchronized 作为悲观锁,锁住了什么?
继续来认识 synchronized,上篇文章加不加 synchronized 有什么区别?我们了解了 synchronized 是在多线程并发竞争同一资源的时候使用,这一篇我们来了解,synchro ...
- 线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调试不用愁!
前言 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈. 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不? 今天陈某 ...
- 聊聊Spring Boot Actuator
概述 在本文中,我们将介绍Spring Boot Actuator.我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x和2.x中的可用内容. 我们将在Spring Boot 1.x中学 ...