[P1341]无序字母对 (欧拉回路)

Posted fsy2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[P1341]无序字母对 (欧拉回路)相关的知识,希望对你有一定的参考价值。

 

我永远信仰欧拉

欧拉回路是很经典的一道题目了

这题算是稍稍修改的模板题吧

欢迎指出错误

题目链接

思路

先判断能不能构成欧拉路径/回路

即度数为1的总点数为2或0的时候符合(前者为连通图,后者为回路)

这题是回路吧

如果不可以,结束

如果可以,dfs搜索路径(貌似搜索路径还有模板来着)

 

代码

代码短,我就不压了

 1 #include<bits/stdc++.h>
 2 #define maxn 257
 3 bool G[maxn][maxn];
 4 int deg[maxn];
 5 char tmp[maxn],res[maxn * maxn];
 6 int n;
 7 void dfs(int i) {
 8     for (int j = 0; j < maxn; j++) {
 9         if (G[i][j]) {
10             G[i][j] = G[j][i] = 0;
11             dfs(j);
12         }
13     }
14     res[n--] = i;
15 }
16 int main()
17 {
18     scanf("%d", &n);
19     for (int i = 0; i < n; i++) {
20         scanf("%s", tmp);
21         G[tmp[0]][tmp[1]] = G[tmp[1]][tmp[0]] = 1;
22         deg[tmp[0]]++;
23         deg[tmp[1]]++;
24     }
25     char fir = 0, cnt = 0;
26     for (int i = 0; i < maxn; i++) {
27         if (deg[i] & 1) {
28             cnt++;
29             if (!fir) fir = i;
30         }
31     }
32     if (!fir) for (int i = 0; i < maxn; i++) if (deg[i]) { fir = i; break; }
33     if (cnt && cnt != 2) return puts("No Solution"), 0;
34     dfs(fir);
35     puts(res);
36 }

 

以上是关于[P1341]无序字母对 (欧拉回路)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1341 无序字母对(欧拉回路)

P1341 无序字母对(欧拉回路)

P1341 无序字母对(欧拉回路+并查集)

P1341 无序字母对(Hierholzer算法判断欧拉回路)

[洛谷P1341]无序字母对

P1341 无序字母对 - 欧拉(回)路