题目分析
这道题题目意思是让你用珠子组成一条项链,其实已经比较直接的给你边了,并且项链的头尾是一样的,所以就相当于让你找图中是否存在欧拉回路。关于欧拉回路其实就是判断所有点的入度和出度是否是偶数,如果是则存在,如果不是则不存在。同样输出的时候注意逆序输出。
#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;
}