题意:其实就是是否存在一条回路,经过每一点。。如果图具有欧拉回路的话,不仅仅是度数都是偶数,还要图是连通的,而连通的判断是,任意两个点是可以互通的,所以可以用dfs去搜索
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 210;
int vis[MAXN],G[MAXN][MAXN],N,M;
void dfs(int v)
{
vis[v] = true ;
for(int i = 0 ; i < N ; i++)
{
if(!vis[i] && G[v][i])
dfs(i);
}
}
int main()
{
while (scanf("%d %d",&N,&M) != EOF)
{
memset(G,0,sizeof(G));
int a,b;
memset(vis,0,sizeof(vis));
for ( int i = 0 ; i < M ; i++)
{
scanf("%d %d",&a,&b);
G[a][b] = G[b][a] = 1;
vis[a]++;
vis[b]++;
}
int cnt = 0;
for (int i = 0 ; i < N ; i++) //欧拉回路的判断
if (vis[i] % 2 == 1 )
{
cnt++;
break;
}
memset(vis,0,sizeof(vis));
if (cnt || M < 2 )
printf("Not Possible\n");
else
{
dfs(0);
bool flag = true;
for (int i = 0 ; i < N ; i++)
{
if(!vis[i])
flag = false;
}
if (flag)
printf("Possible\n");
else printf("Not Possible\n");
}
}
return 0;
}