1126 Eulerian Path (25 分)

1126 Eulerian Path (25 分)

In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similarly, an Eulerian circuit is an Eulerian path which starts and ends on the same vertex. They were first discussed by Leonhard Euler while solving the famous Seven Bridges of Konigsberg problem in 1736. It has been proven that connected graphs with all vertices of even degree have an Eulerian circuit, and such graphs are called Eulerian. If there are exactly two vertices of odd degree, all Eulerian paths start at one of them and end at the other. A graph that has an Eulerian path but not an Eulerian circuit is called semi-Eulerian. (Cited from https://en.wikipedia.org/wiki/Eulerian_path)

Given an undirected graph, you are supposed to tell if it is Eulerian, semi-Eulerian, or non-Eulerian.

Input Specification:

Each input file contains one test case. Each case starts with a line containing 2 numbers N (≤ 500), and M, which are the total number of vertices, and the number of edges, respectively. Then M lines follow, each describes an edge by giving the two ends of the edge (the vertices are numbered from 1 to N).

Output Specification:

For each test case, first print in a line the degrees of the vertices in ascending order of their indices. Then in the next line print your conclusion about the graph -- either EulerianSemi-Eulerian, or Non-Eulerian. Note that all the numbers in the first line must be separated by exactly 1 space, and there must be no extra space at the beginning or the end of the line.

Sample Input 1:

7 12
5 7
1 2
1 3
2 3
2 4
3 4
5 2
7 6
6 3
4 5
6 4
5 6

Sample Output 1:

2 4 4 4 4 4 2
Eulerian

Sample Input 2:

6 10
1 2
1 3
2 3
2 4
3 4
5 2
6 3
4 5
6 4
5 6

Sample Output 2:

2 4 4 4 3 3
Semi-Eulerian

Sample Input 3:

5 8
1 2
2 5
5 4
4 1
1 3
3 2
3 4
5 3

Sample Output 3:

3 3 4 3 3
Non-Eulerian

应该算是很简单的一道题了,判断欧拉回路
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,m;
 4 vector<int> v[550];
 5 int val[550], vis[550], cnt = 0;
 6 void dfs(int x){
 7     vis[x] = 1;
 8     cnt++;
 9     for(int i = 0; i < v[x].size(); i++){
10         if(vis[v[x][i]]) continue;
11         dfs(v[x][i]);
12     }
13 }
14 int main(){
15     cin >> n >> m;
16     int x,y;
17     for(int i = 0; i < m; i++){
18         cin >> x >> y;
19         v[x].push_back(y);
20         v[y].push_back(x);
21         val[x]++;
22         val[y]++;
23     }
24     int odd = 0;
25     for(int i = 1; i <= n; i++){
26         if(val[i]&1) odd++;
27         printf("%d%c", val[i], i == n?‘\n‘:‘ ‘);
28     }
29     dfs(1);
30     if(cnt == n){
31         if(odd == 2){
32             puts("Semi-Eulerian");
33         }else if(odd == 0){
34             puts("Eulerian");
35         }else{
36             puts("Non-Eulerian");
37         }
38     }else{
39         puts("Non-Eulerian");
40     }
41     return 0;
42 }


原文地址:https://www.cnblogs.com/zllwxm123/p/11324187.html

时间: 2024-07-31 18:54:33

1126 Eulerian Path (25 分)的相关文章

PAT 1126 Eulerian Path

In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similarly, an Eulerian circuit is an Eulerian path which starts and ends on the same vertex. They were first discussed by Leonhard Euler while solving the fa

PAT 甲级 1126 Eulerian Path

https://pintia.cn/problem-sets/994805342720868352/problems/994805349851185152 In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similarly, an Eulerian circuit is an Eulerian path which starts and ends on the

1126 Eulerian Path

题意:若图是连通图,且所有结点的度均为偶数,则称为Eulerian:若有且仅有两个结点的度为奇数,则称为semi-Eulerian.现给出一个图,要我们判断其是否为Eulerian,semi-Eulerian还是not-Eulerian. 思路:在数据输入的时候计算各个节点的度:在输出各个节点的度的同时记录度为奇数的结点个数:最后判断判断图是否连通.这种题不考察什么算法,关键要我们理解题意,往往都是很简单的! 代码: #include <cstdio> #include <cstring

PAT_A1126#Eulerian Path

Source: PAT A1126 Eulerian Path (25 分) Description: In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similarly, an Eulerian circuit is an Eulerian path which starts and ends on the same vertex. They were fi

PAT A1126 Eulerian Path (25 分)

In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similarly, an Eulerian circuit is an Eulerian path which starts and ends on the same vertex. They were first discussed by Leonhard Euler while solving the fa

PTA 旅游规划(25 分)

7-10 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便宜的一条路径. 输入格式: 输入说明:输入数据的第1行给出4个正整数N.M.S.D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N?1):M是高速公路的条数:S是出发地的城市编号:D是目的地的城市编号.随后的M行中,每行给出一条高速公路的信息,分别

PAT 1003 Emergency (25)(25 分)

1003 Emergency (25)(25 分) As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in each city and the length of each road betwe

1003 Emergency(25 分)C语言版本(提问求解答)

1003 Emergency(25 分) As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in each city and the length of each road between an

05-树8 File Transfer (25 分)

05-树8 File Transfer (25 分) We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any o