uva 10054 - The Necklace

来源:互联网 发布:fifaol3数据库电脑版 编辑:程序博客网 时间:2024/05/21 12:16
                                做的第一个欧拉回路的题目,参考的一篇博客。。。。。
#include<cstdio>#include<cstring>using namespace std;int g[1010][1010],vis[55];int count,num[51],colornum,cnt,c;void dfs(int a){    vis[a]=1;    cnt++;    for(int i=0; i<51; i++)    {        if(!vis[i]&&g[a][i])            dfs(i);    }    return ;}void euler(int a){    for(int i=1; i<=50; i++)    {        if(g[a][i])        {            g[a][i]--;            g[i][a]--;            euler(i);            printf("%d %d\n",i,a);        }    }    return ;}int main(){    /*freopen("in.txt","r",stdin);*/    int t,n;    scanf("%d",&t);    for(int i=0; i<t; i++)    {        if(i)  putchar('\n');        scanf("%d",&n);        int a,b;        memset(g,0,sizeof(g));        memset(vis,0,sizeof(vis));        memset(num,0,sizeof(num));        for(int j=0; j<n; j++)        {            scanf("%d %d",&a,&b);            g[a][b]++;            g[b][a]++;            num[a]++;            num[b]++;        }        printf("Case #%d\n",i+1);        colornum=0;        int flag=0;        for(int j=1; j<=50; j++)        {            if(num[j]>0)            {                colornum++;                c=j;            }            if(num[j]%2)            {                flag=1;                break;            }        }        cnt=0;        if(flag==0)        {            dfs(c);            if(cnt!=colornum)                printf("some beads may be lost\n");            else                euler(c);        }        else            printf("some beads may be lost\n");    }    return 0;}