原题: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;
}
该博客探讨了一个图论问题,即如何判断一个图是否能一笔画成。关键在于图的连通性和每个节点的度数是否为偶数。通过深度优先搜索判断图的联通性,同时计算每个节点的度数,确保所有节点度数为偶数,即可确定一笔画的可行性。提供的C语言代码实现了这个算法。
3284

被折叠的 条评论
为什么被折叠?



