UVA 10054 The Necklace(歐拉路)

題目分析

這道題題目意思是讓你用珠子組成一條項鍊,其實已經比較直接的給你邊了,並且項鍊的頭尾是一樣的,所以就相當於讓你找圖中是否存在歐拉回路。關於歐拉回路其實就是判斷所有點的入度和出度是否是偶數,如果是則存在,如果不是則不存在。同樣輸出的時候注意逆序輸出。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100;
int G[maxn][maxn], degree[maxn];


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);   //逆序輸出
        }
    }
}

void init(){
    memset(G, 0, sizeof(G));
    memset(degree, 0, sizeof(degree));
}

int main(){
    int T, n;
    scanf("%d", &T);
    for(int kase = 1; kase <= T; kase++){
        if(kase > 1) printf("\n");
        scanf("%d", &n);
        init();
        int u, v;
        for(int i = 0; i < n; i++){
            scanf("%d%d", &u, &v);
            degree[u]++, degree[v]++;
            G[u][v]++, G[v][u]++;
        }
        int ans = 0;
        for(int i = 0; i < maxn; i++)
            if(degree[i]%2){ ans = 1; break;}
        if(ans) printf("Case #%d\nsome beads may be lost\n", kase);
        else{
            printf("Case #%d\n", kase);
            euler(u);
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章