uva 10054 - The Necklace

来源:互联网 发布:菜鸟网络 心怡科技 编辑:程序博客网 时间:2024/05/16 02:31
/*  思路:    1 判断是否为欧拉回路,条件:不存在度为奇数的点,图是连通的。    2 打印欧拉回路*/#include <cstdio>#include <cstring>const int MAX_COLOR = 50 + 5;int G[MAX_COLOR][MAX_COLOR];int edge[MAX_COLOR];int visit[MAX_COLOR];void dfs(int u){    visit[u] = 1;    for(int v=1; v<MAX_COLOR; v++) {        if(G[u][v] && !visit[v]) dfs(v);    }}void euler(int u){    for(int v=1; v<MAX_COLOR; v++) {        if(G[u][v]) {            G[u][v]--;            G[v][u]--;            euler(v);            printf("%d %d\n", v, u);        }    }}int main (){    #ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);    #endif    int T;    scanf("%d", &T);    for(int t=1; t<=T; t++) {        memset(G, 0, sizeof(G));        memset(visit, 0, sizeof(visit));        memset(edge, 0, sizeof(edge));        int N;        scanf("%d", &N);        int u, v;        for(int i=0; i<N; i++) {            scanf("%d%d", &u, &v);            G[u][v]++; G[v][u]++;            edge[u]++; edge[v]++;        }        bool found = true;        for(int i=1; i<MAX_COLOR; i++) { //判断是否存在度为奇数的点            if(edge[i]%2) {found = false; break;}        }        if(found) { //判断是否连通            dfs(u);            for(int i=1; i<MAX_COLOR; i++) {                if(edge[i] && !visit[i]) {found=false; break;}            }        }        printf("Case #%d\n", t);        if(found) {            euler(u);        }        else printf("some beads may be lost\n");        if(t<T) printf("\n");    }    return 0;}


原创粉丝点击