欧拉回路 & 欧拉路径
欧拉路径 & 欧拉回路
概念
欧拉路径: 如果图 G 种的一条路径包括所有的边,且仅通过一次的路径.
欧拉回路: 能回到起点的欧拉路径.
混合图: 既有无向边又有无向边的图.
判定
- 无向图
一个无向图存在欧拉路径,当且仅当 该图所有点度数为偶数 或者 仅有两个点度数为奇数,其余全为偶数. - 有向图
所有的点出度等于入度,或者对于欧拉路径还可以是有一个点出度比入度多\(1\),另有一个点入度比出度多\(1\).
寻找欧拉路径/回路的方法 Hierholzer 算法
Hierholzer算法自动寻找欧拉回路,在找不到欧拉回路的情况下会找到欧拉路径。前提是得给它指定好起点。
算法流程(无向图):
1.判断奇点数。奇点数若为0则任意指定起点,奇点数若为2则指定起点为奇点。
2.开始递归函数Hierholzer(x):
循环寻找与x相连的边(x,u):
删除(x,u)
删除(u,x)
Hierholzer(u);
将x插入答案队列之中
3.倒序输出答案队列
板子题
[USACO Section 3.3] 骑马修栅栏 Riding the Fences
Code
#include<bits/stdc++.h>
using namespace std;
int g[1501][1501];
int du[1501],sta[1501];
int n,e,top,i,j,x,y,st=1,m,mi,p;
void dfs(int i)
{
for(int j=1;j<=m;++j)
if(g[i][j])
{
g[i][j]--;
g[j][i]--;
dfs(j);
}
sta[++top]=i;
}
int main()
{
scanf("%d",&e);
for(i=1;i<=e;++i)
{
scanf("%d%d",&x,&y);
++g[y][x]; ++g[x][y];
du[x]++; du[y]++;
m=max(max(x,y),m);
}
for(i=1;i<=m;++i)
if(du[i]%2)
{st=i;break;}
dfs(st);
for(i=top;i>=1;--i)
printf("%d\n",sta[i]);
return 0;
}
欧拉回路 & 欧拉路径的更多相关文章
- The Best Path HDU - 5883(欧拉回路 && 欧拉路径)
The Best Path Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- 欧拉回路&欧拉路径学习笔记
基础性质(用来判定): 1.无向图欧拉回路没有奇数点 (有向图所有点入度等于出度) 2.无向图欧拉路径只有两个奇数点 (有向图有一个顶点入度比出度大1,有一个顶点出度比入度大1,其他的全相等) 3.图 ...
- [欧拉路径]Play on Words UVA10129
传送门: UVA - 10129 题目大意: 给定一些单词(可能会重复出现),判断单词是否能排成一个序列,前提是单词的最后一个字母与下一个单词的第一个字母相同.输出"The door c ...
- hdu--1878--欧拉回路(并查集判断连通,欧拉回路模板题)
题目链接 /* 模板题-------判断欧拉回路 欧拉路径,无向图 1判断是否为连通图, 2判断奇点的个数为0 */ #include <iostream> #include <c ...
- 【刷题】BZOJ 2935 [Poi1999]原始生物
Description 原始生物的遗传密码是一个自然数的序列K=(a1,...,an).原始生物的特征是指在遗传密码中连续出现的数对(l,r),即存在自然数i使得l=ai且r=ai+1.在原始生物的遗 ...
- nyoj 一笔画问题
一笔画问题 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整 ...
- qbxt Day 5 图论一些基础知识
就是一些感觉比较容易忘的知识 假设根为第0层, 在二叉树的i层上至多有2i个结点,整颗二叉树(深度为k)最多有\(2^{k+1}-1\)个节点 对于任何一棵非空二叉树,如果叶结点个数为\(n_0\), ...
- 2015 Multi-University Training Contest 5 hdu 5348 MZL's endless loop
MZL's endless loop Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- 欧拉图Eulerian Graph
一.节点的度 无向图:节点的度为该节点所连接的边数 有向图:节点的度分为入度和出度. 二.欧拉图定义 具有欧拉回路的图称作欧拉图,具有欧拉路径而无欧拉回路的图称为半欧拉图. 欧拉回路: 通过图中每 ...
随机推荐
- 剑指offer55 字符流中第一个不重复的字符(最典型错误)
典型并且基础的错误: class Solution { public: //Insert one char from stringstream void Insert(char ch) { ) res ...
- CentOS配置主机名和主机映射
1.修改本机主机名 vi /etc/sysconfig/network 修改hostname HOSTNAME=s0 2.配置主机映射 vi /etc/hosts 修改内容如下 192.168.32. ...
- .vue公共组件裁减导航
场景: 有一个公共头部和底部,vue搭建的框架,在app.vue里写的公共方法,首页是个登录页面,不需要公共部分,在这基础上进行公共部分的显示隐藏. 即注册页.登录页.404页面都不要导航 代码: ( ...
- mini_httpd的安装和配置
1.下载:http://www.acme.com/software/mini_httpd/mini_httpd-1.19.tar.gz 2.解压:tar zxvf mini_httpd-1.19.ta ...
- Python语言编写脚本时,对日期控件的处理方式
对日期控件,日期控件的输入控一般是不能手动输入的:把readonly属性去掉就好 其实很简单,我们不去搞时间日期空间,我们把它当成一个普通的input框处理就好了! 但是,很多此类型input框都是禁 ...
- 关于OnTimer()使用
OnTimer()其实是用来响应WM_TIMER消息的,其实OnTimer()就是一个回调函数,不过是系统默认的,当用户使用SetTimer()函数设定一个定时器的时候,只要是第三个参数为NULL,则 ...
- vs2005无法附加到进程 系统找不到文件
用管理员身份打开vs2005. 注意配置.
- NOIP模拟赛 魔方
[题目描述] ccy(ndsf)觉得手动复原魔方太慢了,所以他要借助计算机. ccy(ndsf)家的魔方都是3*3*3的三阶魔方,大家应该都见过. (3的“顺时针”改为“逆时针”,即3 4以图为准.) ...
- HashMap与ArrayMap(和SparseArray)的比较与选择
HashMap与ArrayMap(和SparseArray)的比较与选择 2017年12月26日 06:04:38 阅读数:61 标签: androidjavahashmaparraymap数据结构 ...
- CSS基础(一)
一.CSS概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表 ...