首页 > 试题广场 >

欧拉回路

[编程题]欧拉回路
  • 热度指数:6165 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?

输入描述:
    测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结束。


输出描述:
    每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
示例1

输入

3 3
1 2
1 3
2 3
3 2
1 2
2 3
0

输出

1
0
头像 philos
发表于 2021-03-06 14:46:10
思路 首先欧拉回路是一个连通图,这个可以用并查集的模板来写,下面详尽的写了并查集的一个模板,具体关于并查集的知识我就不叙述了。 然后还要满足所有顶点的度为偶数,这个因为已经给出了各条边,很容易求出来度数 其中需要注意以下几点: 自环不用算,因为去掉自环也不会产生影响,但是加上自环的话会让度数计算产 展开全文
头像 牛客142529159号
发表于 2023-03-18 14:37:36
#include <iostream> #include <cstring> using namespace std; const int N = 1010; int g[N][N]; int n, m; //深搜 + 回溯剪枝 bool dfs(int start, int 展开全文
头像 宁静的冬日
发表于 2022-03-14 18:14:40
万能的dfs #include<iostream> #include<vector> #include<algorithm> using namespace std; #define MAX 1000 int N, M; struct edge { int id 展开全文
头像 csyfZhang
发表于 2020-04-26 14:17:34
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?https://blog.csdn.net/csyifanZhang/article/details/105767883↑更好的阅读体验 之前刷图论的题没有玩过欧拉回路,但是他的判定方法 展开全文
头像 程昱同学
发表于 2023-01-25 21:26:39
#include <bits/stdc++.h> #include <cstring> #include <vector> using namespace std; int N, M; int a, b; int g[1001][1001]; void dfs(i 展开全文
头像 SStarry
发表于 2023-08-24 20:26:41
//欧拉回路条件:1.结点度为偶数 2.连通分量为1 #include <iostream> using namespace std; const int N = 1010; int n, m; int p[N], d[N]; struct Edge{ int from; 展开全文

问题信息

难度:
47条回答 12404浏览

热门推荐

通过挑战的用户

查看代码