【欧拉回路】P1341 无序字母对

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 bool edge[127][127];
 8 int n;
 9 int h;
10 string ans;
11 int d[127];
12 
13 void dfs(int node)
14 {
15     for (int i = 'A'; i <= 'z'; i++)
16     {
17         if (edge[node][i])
18         {
19             edge[node][i] = edge[i][node] = false;
20             dfs(i);
21             if (i == 'Z') i = 'a' - 1;
22         }
23     }
24     ans.push_back(node);
25 }
26 
27 int main()
28 {
29     cin >> n;
30     string t;
31     for (int i = 0; i < n; i++)
32     {
33         cin >> t;
34         edge[t[0]][t[1]] = true;
35         edge[t[1]][t[0]] = true;
36         d[t[0]]++;
37         d[t[1]]++;
38     }
39     int cnt = 0;
40     for (int i = 'A'; i <= 'z'; i++)
41     {
42         if (d[i] % 2)
43         {
44             if(!h) h = i;
45             cnt++;
46         }
47         if (i == 'Z') i = 'a' - 1;
48         //cout << cnt << " ";
49     }
50     if (cnt && cnt != 2)
51     {
52         cout << "No Solution";
53         return 0;
54     }
55     if(!h)
56         for (int i = 'A'; i <= 'z'; i++)
57         {
58             if (d[i])
59             {
60                 h = i;
61                 break;
62             }
63             if (i == 'Z') i = 'a' - 1;
64         }
65     dfs(h);
66     //cout << ans.length();
67     for (int i = ans.length() - 1; i >= 0; i--)
68     {
69         cout << ans[i];
70     }
71 }
View Code

 

posted on 2019-10-09 13:27  thjkhdf12  阅读(104)  评论(0)    收藏  举报