【PAT】【Advanced Level】1126. Eulerian Path (25)
来源:互联网 发布:企业大数据平台 阿里 编辑:程序博客网 时间:2024/06/04 19:35
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 "Eulerian", "Semi-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 125 71 21 32 32 43 45 27 66 34 56 45 6Sample Output 1:
2 4 4 4 4 4 2EulerianSample Input 2:
6 101 21 32 32 43 45 26 34 56 45 6Sample Output 2:
2 4 4 4 3 3Semi-EulerianSample Input 3:
5 81 22 55 44 11 33 23 45 3Sample Output 3:
3 3 4 3 3Non-Eulerian
https://www.patest.cn/contests/pat-a-practise/1126
思路:
统计节点的度数
判断是否是连通图
判断是否有欧拉回路
CODE:
#include<iostream>#include<vector>#include<cstring>#define N 510using namespace std;vector<int> ed[N];bool flag[N];void dfs(int n){flag[n]=1;for (int i=0;i<ed[n].size();i++){if (flag[ed[n][i]]==0){dfs(ed[n][i]);}}return;}int main(){int n,m;cin>>n>>m;for (int i=0;i<m;i++){int a,b;cin>>a>>b;ed[a].push_back(b);ed[b].push_back(a);}int sum=0;for (int i=1;i<=n;i++){if (i!=1) cout<<" ";int ss=ed[i].size();cout<<ss;if (ss%2==1) sum++;}int con=0;memset(flag,0,sizeof(flag));for (int i=1;i<=n;i++){if (flag[i]==0){con++;dfs(i);}}if (con>1){cout<<endl<<"Non-Eulerian"<<endl;}else{if (sum==0) {cout<<endl<<"Eulerian"<<endl;}else if (sum==2){cout<<endl<<"Semi-Eulerian"<<endl;}else{cout<<endl<<"Non-Eulerian"<<endl;}}return 0;}
- PAT (Advanced Level) 1126. Eulerian Path (25)
- 【PAT】【Advanced Level】1126. Eulerian Path (25)
- PAT (Advanced Level) 1126. Eulerian Path (25) 解题报告
- PAT (Advanced Level) Practise 1126 Eulerian Path (25)
- PAT (Advanced Level) Practise 1126 Eulerian Path (25)
- PAT 1126. Eulerian Path (25)
- PAT 1126. Eulerian Path (25)
- PAT:1126. Eulerian Path (25)
- PAT--1126. Eulerian Path
- PAT 1126. Eulerian Path (25)-甲级
- 1126. Eulerian Path (25) PAT 甲级
- PAT甲级 1126. Eulerian Path (25)
- PAT 甲级 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)
- 1126. Eulerian Path (25)
- 实习期间的命令备份
- ShareSDK各社交平台申请APPkey 的网址及申请流程汇总
- 数据库基础知识
- WinServer2003 忘记密码了,如何破解找回
- 深入理解python之self
- 【PAT】【Advanced Level】1126. Eulerian Path (25)
- angular-route注入 路由的页面跳转
- Xcode中常用的快捷键
- mysql 事务 索引 锁 深入探讨相关
- Excel中如何插入超链接
- Android——Activity和Fragment的爱恨纠葛
- HYSBZ1036-树的统计Count
- hadoop第一个计算任务wordcount的运行
- 揭秘阿里年会上的黑科技