两图的讲解:http://www.doc88.com/p-7532430559335.html
欧拉图:
半欧拉图:
哈密顿图:
半哈密顿图:
一笔画问题:http://acm.nyist.net/JudgeOnline/problem.php?pid=42
AC代码:
#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
#include<map>//地图 if continue
using namespace std;
int w[2100],du[2100];
int n;
//string s;
//queue<int> q;
//priority_queue<int> q;//大到小
//priority_queue<int, vector<int>,greater<int> >q;//小到大
int dfs(int a,int b)
{
int i,c=w[a];
for(i=1;i<=n;i++)
{
if(w[i]==c) w[i]=w[b];
}
}
int main()
{
int i,j,k,a,b,c;
int text,m;
cin>>text;
while(text--)
{
memset(du,0,sizeof(du));
cin>>n>>m;
for(i=1;i<=n;i++) w[i]=i;
for(i=1;i<=m;i++)
{
cin>>a>>b;
if(w[a]!=w[b]) dfs(a,b);
du[a]++,du[b]++;
}
int ans=0;
for(i=1;i<=n;i++) if(du[i]%2) ans++;
if(ans>2) cout<<"No"<<endl;
else
{
for(i=2;i<=n;i++) if(w[i]!=w[i-1]) break;
if(i-1==n) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}