题意
顶点的度数全部为偶数,必定存在欧拉回路,输出“Eulerian”
两个顶点的度数为奇数,其余全部为偶数,必定存在欧拉路径,输出“semi-Eulerian”
其余情况输出“Non-Eulerian”
需要判断是否为连通图,否则会WA某一数据点
若连通分量大于1,则输出“Non-Eulerian”
源码
#include<iostream>
#include<vector>
using namespace std;
vector<int>mp[505];
int visit[505]={0};
void dfs(int x){
for(int i=0;i<mp[x].size();i++){
if(visit[mp[x][i]]==1){
continue;
}else{
visit[mp[x][i]]=1;
dfs(mp[x][i]);
}
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
mp[x].push_back(y);
mp[y].push_back(x);
}
int even=0,odd=0;
for(int i=1;i<n;i++){
cout<<mp[i].size()<<" ";
if(mp[i].size()%2==0) even++;
else odd++;
}
cout<<mp[n].size()<<endl;
if(mp[n].size()%2==0) even++;
else odd++;
int num=0;
for(int i=1;i<=n;i++){
if(visit[i]==0){
dfs(i);
num++;
}
}
if(num>1) cout<<"Non-Eulerian"<<endl;
else if(even==n) cout<<"Eulerian"<<endl;
else if(odd==2) cout<<"Semi-Eulerian"<<endl;
else cout<<"Non-Eulerian"<<endl;
return 0;
}