计蒜客 | 欧拉回图 | 判断欧拉回路

Posted 如有一味绝境,非历十方生死

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客 | 欧拉回图 | 判断欧拉回路相关的知识,希望对你有一定的参考价值。

你学过一笔画问题么?其实一笔画问题又叫欧拉回路,是指在画的过程中,笔不离开纸,且图中每条边仅画一次,而且可以回到起点的一条回路。

蒜头君打算考考你,给你一个图,问是否存在欧拉回路?

输入格式

第 11 行输入两个正整数,分别是节点数 N(1 < N < 1000)N(1<N<1000) 和边数 M(1 < M < 100000)M(1<M<100000);

紧接着 MM 行对应 MM 条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从 11 到 NN 编号)。

输出格式

若存在欧拉回路则输出 11,否则输出 00。

样例输入

10 11
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 3
3 1

样例输出

1
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int MAP[1005][1005];
 5 int degree[1005];
 6 int  visited[1005];
 7 void init(int n)  //初始化 
 8 {
 9     for(int i = 0; i <= n; i++)
10         for(int j = 0; j <= n; j++)
11             MAP[i][j] = 0;    
12         
13     for(int i = 0; i <= n; i++)
14         degree[i] = 0,visited[i] = 0;
15         
16 } 
17 
18 void dfs(int v, int n) 
19 {
20     visited[v] = 1;
21     for(int i = 1; i <= n; i++)
22     {
23         if(!visited[i] && MAP[v][i])  dfs(i,n);
24     }
25 }
26 
27 int isConnected(int n) //判断连通图 
28 {
29     for(int i = 1; i <= n; i++)
30     {
31         if(!visited[i]) return 0;
32     }
33     return 1;
34 }
35 
36 int isOula(int n) //判断欧拉图 
37 {
38     for(int i = 1; i <= n;i++)
39     {
40         if(degree[i]%2!=0)  return 0;
41     }
42     return 1;
43 }
44 
45 int main()
46 {
47      int n,m,a,b;
48      while(cin>>n>>m)
49      {
50          bool flag = false;
51          init(n);
52          while(m--)
53          {
54              scanf("%d %d",&a,&b);
55              MAP[a][b] = MAP[b][a] = 1;
56              degree[a]++;
57              degree[b]++;
58         }
59         
60         dfs(1,n);
61     
62         if(!isConnected(n)) {
63             cout<<"0"<<endl;
64         } 
65         else {
66             if(isOula(n)) cout<<"1"<<endl;
67             else cout<<"0"<<endl;
68         }
69 
70      }
71 
72     return 0;
73 }

 

以上是关于计蒜客 | 欧拉回图 | 判断欧拉回路的主要内容,如果未能解决你的问题,请参考以下文章

欧拉路径和欧拉回路判断方法

欧拉回路的解法

hdu--1878--欧拉回路(并查集判断连通,欧拉回路模板题)

计蒜客练习题:互质数个数

Sum - 计蒜客

欧拉回路