无向图的欧拉回路和欧拉路径判断

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;

const int maxn=1002;
vector<int> graph[maxn];
int n,m,cnt,in;
bool visited[maxn];

void dfs(int v)
{
    for(int i=0;i<graph[v].size();i++)
    {
        int e=graph[v][i];
        if(!visited[e])
        {
            cnt++;
            if(graph[e].size()%2)
                in++;
            visited[e]=true;
            dfs(e);
        }
    }
}

int main()
{
    int t;
    cin>>t;
    while (t--) {
        cin>>n>>m;

        for(int i=0;i<=n;i++)
            graph[i].clear();

        for(int i=0;i<m;i++)
        {
            int x,y;
            cin>>x>>y;
            graph[x].push_back(y);
            graph[y].push_back(x);
        }

        cnt=0;
        in=0;
        memset(visited,false,sizeof(visited));
        dfs(1);

        if((m==0&&n==1)||(cnt==n&&(in==0||in==2)))
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
}
posted @ 2019-07-15 12:01  prestige  阅读(518)  评论(0编辑  收藏  举报