【UVA 10054】The Necklace

Portal

【topic】

Input formats:

Output formats:

【Input】

2
5
1 2
2 3
3 4
4 5
5 6
5
2 1
2 2
3 4
3 1
2 4

【Output】

Case #1
some beads may be lost
Case #2
2 1
1 3
3 4
4 2
2 2

【analysis】

欧拉回路裸题

把每 种颜色看成一个结点,珠子的两端为一条边。

注意在相邻两组输出之间应有一个空行。

[Code]

#include<cstdio>
#include<cstring>
using namespace std;
int g[55][55],d[55];
inline void euler(int u){
    for(int v=1;v<=50;v++){
        if(g[u][v]){
            g[u][v]--;
            g[v][u]--;
            euler(v);
            printf("%d %d\n",v,u);//逆序输出
        }
    }
}
int main(){
    int t,n;
    scanf("%d",&t);
    for(int k=1;k<=t;k++){
        scanf("%d",&n);
        memset(g,0,sizeof(g));
        memset(d,0,sizeof(d));
        for(int i=1;i<=n;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            g[u][v]++;g[v][u]++;
            d[u]++;d[v]++;
        }
        printf("Case #%d\n",k);
        int i;
        for(i=1;i<=50;i++)
            if(d[i]%2)
                break;
        if(i<=50)
            printf("some beads may be lost\n");
        else
            for(i=1;i<=50;i++)
                euler(i);
        if(k!=t)
            printf("\n");
    }
    return 0;
}

Guess you like

Origin www.cnblogs.com/hlw1/p/11006537.html