一笔画判断
一笔画判断
时间限制:1秒 内存限制:128M
题目描述
如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。 根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数,题目保证该图连通,即从任何一点出发经过有限条路可以到达任何一点。
输入描述
第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。0<n<1000。
输出描述
有欧拉路输出“此图存在欧拉路,可一笔画成”,存在欧拉回路输出“此图存在欧拉回路,可一笔画成”,既不存在欧拉路也不存在欧拉回路,输出“此图无法一笔画成”
样例
输入
5 5
1 2
2 3
3 4
4 5
5 1
1 2
2 3
3 4
4 5
5 1
输出
此图存在欧拉回路,可一笔画成
#include<iostream>
using namespace std;
int main()
{
int n,m,s=0,i,c[1001]={0};
int a,b;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>a>>b;
c[a]++;
c[b]++;
}
for(i=1;i<=n;i++)
{
if(c[i]%2!=0)
{
s++;
}
}
if(s==2)
{
cout<<"此图存在欧拉路,可一笔画成";
}
else if(s==0)
{
cout<<"此图存在欧拉回路,可一笔画成";
}
else
{
cout<<"此图无法一笔画成";
}
return 0;
}