UVA-10054.The Necklace(欧拉回路)解题报告

2019-02-09-21:55:23

原题链接

题目描述:

  给定一串珠子的颜色对,每颗珠子的两端分别有颜色(用1 - 50 之间的数字表示,对每颗珠子的颜色无特殊要求),若两颗珠子的连接处为同种颜色则可以相连,

当整串珠子都满足两两可以相连时则输出连接序列,否则输出some beads may be lost。

解题思路:

  简单欧拉回路思维,注意判断该图是否可以构成欧拉回路。

算法描述及其实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 const int maxn = 50 + 1;
 5 const int nmax = 1000 + 1;
 6 int l, r, n, t, kase = 0;
 7 int G[maxn][maxn], ans[nmax][2], degree[maxn];
 8 bool flag;
 9
10 void euler_circut(int i) {//当搜寻到最后一颗珠子时回溯保存之前所有的珠子。
11     for(int j = 0; j < maxn; j ++)
12         if(G[i][j]) {
13             G[i][j] --;
14             G[j][i] --;
15             euler_circut(j);
16             ans[t][0] = i + 1;
17             ans[t ++][1] = j + 1;
18         }
19 }
20
21 int main () {
22     ios::sync_with_stdio(false);
23     int T;
24     cin >> T;
25     while(T --) {
26         flag = true;
27         memset(G, 0, sizeof(G));
28         memset(degree, 0, sizeof(degree));
29         cin >> n;
30         for(int i = 0; i < n; i ++) {
31             cin >> l >> r;
32             G[r - 1][l - 1] ++;
33             G[l - 1][r - 1] ++;
34             degree[r - 1] ++;
35             degree[l - 1] ++;
36         }
37         t = 0;
38         for(int i = 0; i < maxn; i ++)
39             if(degree[i] % 2) {
40                 flag = false;
41                 break;
42             }
43         if(flag)
44             for(int i = 0; i < maxn; i ++)
45                 euler_circut(i);
46         cout << "Case #" << ++kase << endl;
47         if(flag)
48             for(int i = t - 1; i >= 0; i --)
49                 cout << ans[i][0] << ‘ ‘ << ans[i][1] << endl;
50         else
51             cout << "some beads may be lost" << endl;
52         cout << endl;
53     }
54     return 0;
55 }

原文地址:https://www.cnblogs.com/bianjunting/p/10358549.html

时间: 2024-10-18 16:33:26

UVA-10054.The Necklace(欧拉回路)解题报告的相关文章

uva 10054 The Necklace 欧拉回路

// uva 10054 The Necklace 欧拉回路 // 以颜色为节点,两种颜色互相连着有向边,然后跑一边欧拉回路就ok了 // 这题套了余老师模板书上的欧拉回路,然后就过了 // // 通过这题我了解到了,欧拉回路的基本思想 // 哎,继续练吧... #include <algorithm> #include <bitset> #include <cassert> #include <cctype> #include <cfloat>

UVA - 10054 - The Necklace (欧拉回路!!)

UVA - 10054 The Necklace Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Problem D: The Necklace  My little sister had a beautiful necklace made of colorful beads. Two successive beads in the neckl

uva 10881 Piotr&#39;s Ants 解题报告

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1822 题目意思:有一条 L 厘米长的杆,上面有 n 只蚂蚁,给出每只蚂蚁的朝向以及离杆上最左端的距离,问 T 秒之后每只蚂蚁到达的位置,如果 T 秒后某个位置有多只蚂蚁同时到达,那么这堆蚂蚁处于的位置 + Turning,如果超过这条杆的长度,输出F

【欧拉回路】UVA - 10054 The Necklace

题目大意: 一个环被切割成了n个小块,每个小块有头尾两个关键字,表示颜色. 目标是判断给出的n个小块能否重构成环,能则输出一种可行解(按重构次序输出n个色块的头尾颜色).反之输出"some beads may be lost". 解题思路: 一开始想的曼哈顿回路,WA了.后来依靠别人的智慧,知道正解是欧拉回路. 在知道这道题是欧拉回路的情况下就变得很简单了,就是一道模板题--每种颜色看成一个点,每个小块代表两点之间连接的边,如果存在欧拉回路就有可行解. 不存在欧拉回路有两种情况:1.图

UVA 10054 - The Necklace(欧拉回路)

题目链接:点击打开链接 题意:n个珠子,每个珠子的两半由不同的颜色组成. 只有相同的颜色才能接在一起, 问能否组成一个一个项链. 思路:如果将一个珠子看成是一条连接两个顶点的无向边,那么本题就变成了求无向图是否存在欧拉回路.  对于无向图, 如果所有点的度数都是偶数并且图是联通的, 那么就存在欧拉回路.   那么从任意一个点开始走都将走完所有道路并回到起点. 细节参见代码: #include<cstdio> #include<cstring> #include<algorit

UVA 10054 The Necklace (无向图的欧拉回路)

题意: 妹妹有一条项链,这条项链由许多珠子串在一起组成,珠子是彩色的,两个连续的珠子的交汇点颜色相同,也就是对于相邻的两个珠子来说,前一个珠子的末端颜色和后一个珠子的首端颜色相同.有一天,项链断了,珠子洒落了一地,到处都是,妹妹使出浑身解数把地板上能看到的珠子(5-1000)都捡了起来,但是不确定是否收集齐了.给你他妹妹收集的珠子的两端的颜色编号(1 - 50),让你判断是否收集齐了. 思路: 把颜色看成点,把一个珠子看成一个无向边,则问题有解,当且仅当图中存在欧拉回路.于是先判断由题意构建出来

UVa 10054 The Necklace【欧拉回路】

题意:给出n个珠子,珠子颜色分为两半,分别用1到50之间的数字表示, 现在给出n个珠子分别的颜色,问是否能够串成一个环.即为首尾相连,成为一个回路 判断是否构成一个环,即判断是否为欧拉回路,只需要判断度数是不是偶数就可以了 (这道题目给出的珠子是在一个连通块上的,所以不用考虑连通) 然后输出结果要逆序输出,见这一篇,非常的详细 http://www.cnblogs.com/scau20110726/archive/2012/11/09/2762371.html 1 #include<iostre

UVA 10054 The Necklace

题意: 项链散了  每个珠子前端后端分别有颜色  在项链中  相邻的珠子的相邻的那一端颜色相同  问  找到的珠子能不能重新串起一根项链 思路: 比较经典的欧拉回路题  Fleury算法解决问题 代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define M 60 int n,ans,top,m,t,T; int Edge[M][M],path[M*M],

uva 10054 The Necklace(欧拉通路)

提交了7次,总算AC了.题目不难,就是判断下欧拉通路.注意细节. /* Status:AC Title :The Necklace */ #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <stack> #include <queue> #include <s