您的位置:首页 > 其它

UVA - 10054 The Necklace

2016-08-13 23:12 357 查看
题目大意:每个节点有两个颜色,连接时颜色要相同,问能否串成项链。

解题思路:判断欧拉回路。

无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数)。

记录一下度数,判断全偶然后输出就行。euler 这个输出的时候要逆序注意一下。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int G[100][100];
int d[100];
int N;
void euler(int now) {
for (int i = 1; i < 51; i++)
if (G[now][i]) {
G[now][i]--;
G[i][now]--;
euler(i);
printf("%d %d\n", i, now);
}
}
int main() {
int T;
scanf("%d", &T);
for (int t = 0; t < T; t++) {
memset(G, 0, sizeof(G));
memset(d, 0, sizeof(d));
int a, b;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d%d", &a, &b);
d[a]++;
d[b]++;
G[a][b]++;
G[b][a]++;
}
if (t) printf("\n");
printf("Case #%d\n", t+1);

int i;
for (i = 1; i < 51; i++)
if (d[i] % 2)
break;
if (i != 51)
printf("some beads may be lost\n");
else
euler(a);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva