写在前面:虽然这就是一个典型的DFS板子题,但是讲道理,这道题还是比较坑的。因为题目上没有说欧拉回路是不能有奇数顶点的(当然,这确实是欧拉回路的性质,但是这对没学好离散的人很不公平啊),如果不考虑这个情况样例二就会输出1.。代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,flag,e[1001][1001],vis[1001],degree[1001];
void dfs(int s,int c)
{
if(flag) return;
if(c==n)
{
flag=1;
return;
}
for(int i=1;i<=n;i++)
{
if(vis[i]||!e[s][i]) continue;
vis[i]=1;
dfs(i,c+1);
vis[i]=0;
}
}
int check()
{
for(int i=1;i<=n;i++)
if(degree[i]%2) return 0;
return 1;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int a,b;
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>a>>b;
e[a][b]=e[b][a]=1;
degree[a]++;
degree[b]++;
}
vis[1]=1;
dfs(1,1);
if(flag&&check()) cout<<"1";
else cout<<"0";
}