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