原题:https://pintia.cn/problem-sets/15/problems/859
思路:
两点:
1.判断图是否联通。使用dfs 看看每一个点是否都被visit过
2.以及每个节点的度数是否为偶数 算出每个点的度数,判断是否为偶数
可以自己拿草稿纸试试看,只要每个节点上的度是偶数,真的可以一笔划过。
至于上面两个条件实现起来就很简单了。
#include<stdio.h>
#define MAXSIZE 1010
int G[MAXSIZE][MAXSIZE];
int n,m;
int visit[MAXSIZE];
void dfs(int s)//深度优先搜索模板
{
int i;
visit[s]=1;
for(i=1;i<=n;i++)
{
if(G[s][i]&&!visit[i])
{
visit[i]=1;
dfs(i);
}
}
}
int judge(int s)//求度数
{
int i,cnt=0;
for(i=1;i<=n;i++)
{
if(G[s][i]||G[i][s])
{
cnt++;
}
}
return cnt;
}
int main()
{
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
G[x][y]=G[y][x]=1;
}
dfs(1);
for(i=1;i<=n;i++)
{
if(!visit[i]||judge(i)%2!=0)
{
printf("0");
return 0;
}
}
printf("1");
return 0;
}