您的位置:首页 > 其它

NYOJ-42 一笔画问题

2012-04-25 22:25 288 查看
解题思路:1 如果图中所有的点连通且度都为偶数则可以一笔画成。

2 如果图中有不超过2个点的度为奇数则可以一笔画。

3做法显然先通DFS判断图是否连通过,然后在判断图中奇数点度的个数即可。

View Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#define N 1010

using namespace std;

int G

, vis
, num
;
int P, Q, ok;
void dfs(int u)
{
int v;
vis[u] = 1;
for(v=1; v<=P; v++)
{
if(G[u][v] && !vis[v] && u!=v)
{
dfs(v);
}
}
}

int main()
{
int i,ncases,count,a,b;

scanf("%d",&ncases);
while( ncases-- )
{
scanf("%d%d",&P,&Q);
memset(G,0,sizeof(G));
memset(num,0,sizeof(num));
memset(vis,0,sizeof(vis));
for(i=1; i<=P; i++)
G[i][i] = 1;
for(i=1; i<=Q; i++)
{
scanf("%d%d",&a,&b);
G[a][b] = G[b][a] = 1;
num[a]++;  num[b]++;
}
ok = 1;
count = 0;
dfs(1);
for(i=1; i<=P; i++)
{
if(!vis[i])
{
ok = 0;
printf("No\n");
break;
}
}
for(i=1; i<=P; i++)
{
if(num[i]%2!=0)
{
count++;
}
}
if(ok)
{
if(count==0 || count==2)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: