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;}