//有几个限制条件 就是一笔画问题
//而且起点和终点必须要在同一点 还必须是连通图 这分别用两个数组来解决
#include <stdio.h>
#include <stdlib.h>
int mp[1006][1006];//存储图
int vis[1006];
int N,M;
void dfs(int v)//从v开始遍历
{
vis[v]=0;
for (int i = 1;i<=N;i++)
{
if (mp[v][i] && vis[i])//存在且未访问
{
dfs(i);
}
}
}
int main()
{
scanf("%d%d",&N,&M);
for (int i = 0;i<M;i++)
{
int a,b;
scanf ("%d%d",&a,&b);
mp[a][b] = 1;
mp[b][a] = 1;
vis[a]=1;
vis[b]=1;
}
for (int i = 1;i<=N;i++)
{
int sum = 0;
for (int j = 1;j<=N;j++)
{
if (mp[i][j]==1) sum++;
}
if (sum&1)
{
printf ("0\n");
return 0;
}
}
dfs(1);
for (int i = 1;i<=N;i++)
{
if (vis[i])
{
printf ("0");
return 0;
}
}
printf ("1");
return 0;
}
主要思想都在代码有体现,一个是判断度用每一行的累加就可以了,有一个是判断连通图,用dfs跑一趟,dfs的话,相当于一点一点的跳跃,直到把所有的都给跳完。不难,很简单的一题。