博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT 1126 Eulerian Path[欧拉路][比较]
阅读量:6232 次
发布时间:2019-06-21

本文共 3362 字,大约阅读时间需要 11 分钟。

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 )

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 125 71 21 32 32 43 45 27 66 34 56 45 6

Sample Output 1:

2 4 4 4 4 4 2Eulerian

Sample Input 2:

6 101 21 32 32 43 45 26 34 56 45 6

Sample Output 2:

2 4 4 4 3 3Semi-Eulerian

Sample Input 3:

5 81 22 55 44 11 33 23 45 3

Sample Output 3:

3 3 4 3 3Non-Eulerian

 题目大意:给出一个图,判断是否是欧拉图或者半欧拉图,首先打印出每个点的度,再输出是否是欧拉图。

//看到这个题的时候,发现自己忘了如何判断欧拉图。

如果连通的图中所有点的度全是偶数,那么就是欧拉图;连通图中有正好有两个点的度是奇数,那么就是半欧拉图,即所有的欧拉路径都起自一个在另一处终止。

#include 
#include
#include
#include
using namespace std;map
mp;int main(){ int n,m; cin>>n>>m; int f,t; for(int i=0;i
>f>>t; mp[f]++; mp[t]++; } int ct=0;//怎么判断map是否到最后一个了呢? for(auto it=mp.begin();it!=mp.end();){ cout<
second; if(it++!=mp.end())cout<<" "; if(it->second%2!=0) ct++; } cout<<"\n"; //如果输入0 0,那么该怎么输出呢? if(ct==0)cout<<"Eulerian"; else if(ct==2)cout<<"Semi-Eulerian"; else cout<<"Non-Eulerian"; return 0;}
多种错误

 

//这个是我写的,但是提交两次,3个格式错误,4个答案错误,一个测试点也没通过。

最终AC:

#include 
#include
#include
#include
using namespace std;vector
vt[505];bool vis[505];map
mp;void dfs(int f){ vis[f]=true; for(int i=0;i
>n>>m; int f,t;//需要首先判断图是否连通。 for(int i=0;i
>f>>t; vt[f].push_back(t); vt[t].push_back(f); mp[f]++; mp[t]++; } int ct=0;//怎么判断map是否到最后一个了呢?// for(int i=0;i

 

1.最关键的是需要进行联通判断,前提是必须是连通图

2.还有在进行输出每个点的度的时候,直接输出每个向量的size即可。不知道为什么注释掉的部分使用map就并不正确,有一个测试点4过不去。

#include 
#include
using namespace std;int main() { map
mp; mp[1]=2; mp[2]=3; mp[3]=4; cout<
<<"\n"; for(int i=0;i

输出:

由于i从0开始,一开始map中并没有,所以又进行了一个添加,导致map长度+1,这可能就是出错的原因吧。

转载于:https://www.cnblogs.com/BlueBlueSea/p/9759437.html

你可能感兴趣的文章
大数据的寒冬已至,谁将倒下,谁成巨人?
查看>>
美日德将加强物联网领域合作,欲主宰该市场
查看>>
全球能源专家:2050年前全部使用可再生能源是可行的
查看>>
大数据规划布局“未来生产要素”
查看>>
使用云计算灾难恢复计划制定勒索软件恢复策略
查看>>
运营商NFV MANO梦想照进现实
查看>>
2015中国APT研究报告:中国是APT攻击的主要受害国
查看>>
Chatsworth公司推出了一款高科技数据中心柜锁
查看>>
微软豪购Linkedin 补移动社交船票?
查看>>
苹果iMessage上线Business Chat功能
查看>>
戴尔EMC、日立数据系统和NetApp现已出货博科第六代光纤通道方案
查看>>
南航率先加入综合交通出行大数据开放云平台
查看>>
英特尔应当收购联发科原因:成功进入移动芯片市场
查看>>
宗宁:企业微博品牌榜的新时代意义
查看>>
实例:某大型企业遭受勒索蠕虫袭击纪实
查看>>
OA选型之技术与性价比
查看>>
《Clojure数据分析秘笈》——1.8节从网页表中抓取数据
查看>>
《交互式程序设计 第2版》一3.6 导入外部库
查看>>
“云计算”让城市智慧起来
查看>>
Google计划收购数据科学社区Kaggle
查看>>