【题目描述】
如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。

根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数。

【输入】
第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。

【输出】
欧拉路或欧拉回路,输出一条路径即可。

【输入样例】
5 5
1 2
2 3
3 4
4 5
5 1
【输出样例】
1 5 4 3 2 1

分析

  1. 首先我们要知道什么是欧拉回路,什么是欧拉路;欧拉回路有0个奇点,欧拉路有2个奇点(两个定理)(起点是一个奇点,终点是另一个奇点);(欧拉回路和欧拉路,都要保证图是连通的)
  2. 所以我们要知道什么是奇点,奇点就是这个点的入度(出度)为奇数,那么就是奇点(奇点就是从这个点出发的线有奇数条,偶点就是从这个点出发的线有偶数条。)
  3. 所以用一个dis数组去记录每个节点的度数,然后找奇点start,如果有奇点(start!=1)的话,从奇点出发到可另一个奇点(欧拉路);无奇点的话,从第一个结点(start默认=1)出发(欧拉回路);
  4. 正如题上所说:找欧拉回路,对任意一个点执行深度优先遍历,找欧拉路,则对一个奇点执行dfs;
#include <bits/stdc++.h>using namespace std;const int N = 1000;
int a[N][N];//存图
int dis[N];//表示结点的度
int path[N];//记录路径
int n, m, cnt;//欧拉路2个奇点,欧拉回路0个奇点void dfs(int u) {//从当前点u分别向其他n个点发起搜索for (int i = 1; i <= n; ++i) {if (a[u][i]) {//一笔画,一路到底 不存在回溯a[u][i] = a[i][u] = 0;dfs(i);}}path[++cnt] = u;
}int main() {cin.tie(0);cin >> n >> m;for (int i = 0; i < m; ++i) {int x, y;cin >> x >> y;a[x][y] = a[y][x] = 1;dis[x]++;dis[y]++;}int start = 1;for (int i = 1; i <= n; ++i) {//找奇点if (dis[i] % 2)start = i;}//有奇点(start!=1)的话,从奇点出发到可另一个奇点(欧拉路);//无奇点的话,从第一个结点(start默认=1)出发(欧拉回路);dfs(start);for (int i = 1; i <= cnt; ++i) {cout << path[i] << " ";}return 0;
}

1341:【例题】一笔画问题——欧拉(回)路相关推荐

  1. 【4.3 欧拉函数详解】

    更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 目录 4.3.1 公式法求欧拉函数 4.3.2 筛法求欧拉函数 概念 1∼N1∼N1∼N中与NNN互质的数的个数被称为欧拉函数,记 ...

  2. Python实现---南邮离散数学实验四:图的生成及欧拉(回)路的确定

    一.题目要求: 内容: 对具有n个结点的无向图,判断其能否被一笔画. 要求: 对给定n个结点的无向图,进行欧拉图和半欧拉图的判定,若是欧拉图或半欧拉图,则输出所有的欧拉(回)路. 二.实验原理及内容: ...

  3. 欧拉筛 筛法求素数 及其例题 时间复杂度O(n)

    埃式筛法尽管不错,但是确实做了许多无用功,某个数可能会被重复的筛好几次,欧拉筛解决了这个方法,下面为代码: 注意理解if(i%prim[j]==0) break; 大佬讲的不错的博客,我就不做复读机了 ...

  4. 洛谷 - P1217 [USACO1.5]回文质数 Prime Palindromes(欧拉线性筛+数论小知识)

    题目链接:点击查看 题目大意:给出一个a和b,求出区间[a,b]中所有回文质数,回文质数指的是一个数既是回文数也是质数 题目分析:首先质数好判断,我们只需要用欧拉筛预处理打好表即可,判断回文数我们也只 ...

  5. 欧拉线性筛 与 欧拉函数 + 几道例题

    欧拉线性筛 生成素数表prime[]数组 const int maxn = 1e7+5; int prime[maxn]; int visit[maxn]; void Prime(){memset(v ...

  6. 向前欧拉公式例题_欧拉方程的求解

    1 欧拉方程的求解 1. 引言 在数学研究领域,我们经常会看到以数学家名字命名的概念.公式.定 理等等,让人敬佩跟羡慕 . 但是,迄今为止,哪位数学家的名字出现得最多 呢?他就是数学史上与阿基米德. ...

  7. 欧拉函数(简单介绍+例题)

    Acwing视频讲解 欧拉函数:正整数n,欧拉函数是小于n的正整数中与n互质的数的数目 N=p1a1 * p1a2 * p1a3 * -* p1ak 如果pj是i的最小质因子 红色区域一样 经推导得: ...

  8. 欧拉如何解决哥尼斯堡七桥问题(二)

    上一讲欧拉已经证明哥尼斯堡七桥问题不存在每座桥只走一次的走法.但是这里有一个特殊情况,即A.B.C.D每个地区恰巧都有奇数个桥连通.欧拉当然也想到了如果存在偶数桥,及任意数量的河和桥图是否存在每座桥只 ...

  9. UVA 10129 Play on Words(欧拉道路)

    题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...

最新文章

  1. TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性...
  2. c++ using namespace std; - 海明威 - 博客园
  3. 【AI2】更新app inventor2离线开发环境AppInventor2021,安卓app图形化开发环境
  4. PHP教程-防止网站被刷票的小技巧
  5. 三种编程命名规则:驼峰命名法 (壹)
  6. 用“谬论”指挥研究方向数十年,是谁让“老年痴呆”至今仍是绝症?
  7. 清华博士回应:我为什么逃离科研,去中学当老师?
  8. 转载 从算法上解读自动驾驶是如何实现的?
  9. 网站集成paypal快捷支付
  10. 用matlab进行拉普拉斯滤波,[转载]matlab滤波技术及区域处理---线性滤波
  11. 硬盘测速工具:Blackmagic Disk Speed Test for Mac
  12. matlab2015的marker,matlab中markersize什么意思
  13. 结合grabcut和inpaint,实现人像去除
  14. 限期4个月:苹果严控版号,开发者将如何自救?
  15. 定时器输出的PWM频率范围及占空比精度
  16. 如何双开或多开skype
  17. div高度、宽度100%|div width、height 100% - div100%
  18. This page can't be displayed. Contact support for additional information. The incident ID is: xxxxxx
  19. BZOJ 4605: 崂山白花蛇草水 树套树 权值线段树套kdtree
  20. oracle查询列出24小时,ORACLE日期相关操作

热门文章

  1. 韩国中产的今天!76岁的快递员,70岁的站街女......
  2. 【C++】最近公共祖先 LCA
  3. Python将url转换作为合法文件名
  4. 无线路由器服务器名怎么设置,服务器改无线路由器怎么设置
  5. css实现文字越界省略,且后面紧跟一个图标
  6. 源发行版17需要目标发行版17
  7. 【342期】SpringBoot + Redis 布隆过滤器防恶意流量击穿缓存的正确姿势!
  8. ARM Linux控制CDS5516
  9. SCI论文攻略---完整版!!!!
  10. 玩客云刷入openwrt系统