标签:
10054 The Necklace2 2
题意:给你n条边,要你判断这些边能不能组成欧拉回路,并输出它的路径
思路:欧拉回路的模板题
AC代码:
#include<cstdio>
#include<cstring>
int g[60][60],d[60],p[60];
int find(int x)
{
if(x!=p[x])
p[x]=find(p[x]);
return p[x];
}
void dfs(int u)
{
int v;
for(v=1;v<=50;v++)
if(g[u][v]){
g[u][v]--;
g[v][u]--;
dfs(v);
printf("%d %d\n",v,u);
}
}
int main()
{
int i,j,k,t;
int cas=1;
// freopen("in.cpp","r",stdin);
// freopen("out.cpp","w",stdout);
scanf("%d",&t);
while(t--)
{
int n,u,v;
scanf("%d",&n);
memset(g,0,sizeof(g));
memset(d,0,sizeof(d));
for(i=1;i<=50;i++)
p[i]=i;
for(i=0;i<n;i++)
{
scanf("%d%d",&u,&v);
d[u]++;
d[v]++;
g[u][v]++;
g[v][u]++;
if(find(u)!=find(v))
p[find(u)]=find(v);
}
int ok=1;
for(i=0;!d[i];i++);
for(j=i+1;j<=50;j++)
{
if(d[j]&&find(i)!=find(j))
{
ok=0;
break;
}
}
if(ok)
{
for(i=1;i<=50;i++)
if(d[i]%2!=0)
{
ok=0;
break;
}
}
if(cas!=1)
printf("\n");
printf("Case #%d\n",cas++);
if(!ok)
{
printf("some beads may be lost\n");
}
else
{
for(u=0;!d[u];u++);
dfs(u);
}
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/u012313382/article/details/45893677