[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]无序字母对 (欧拉回路)的主要内容,如果未能解决你的问题,请参考以下文章