欧拉回路

 

以字母为结点,单词为边;注意两个相同的单词表示两条边。

并查集判断是否连通,出度,入度判断是否是欧拉回路

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 int map[100010];
 7 int g[30][30];
 8 int num[26][2];
 9 int v[30],f[30];
10 
11 int father (int i){
12     f[i]=f[i]==i?f[i]:father (f[i]);
13     return f[i];
14 }
15 
16 int main (){
17     int t,n;
18     scanf ("%d",&t);
19     while (t--){
20         cin>>n;
21         char s[2000];
22         memset (v,0,sizeof v);
23         memset (g,0,sizeof g);
24         for (int i=0;i<n;i++){
25             scanf ("%s",s);
26             int len=strlen (s);
27             g[s[0]-'a'][s[len-1]-'a']++;
28             v[s[0]-'a']=v[s[len-1]-'a']=1;
29         }
30         int flag=1;
31         for (int i=0;i<30;i++)  f[i]=i;
32         for (int i=0;i<26;i++)
33             for (int j=0;j<26;j++)
34                 if (g[i][j]||g[j][i])
35                     f[father(i)]=father(j);
36         for (int i=0;i<26;i++){
37             for (int j=0;j<26;j++){//cout<<i<<j<<endl;
38                 if (v[i]&&v[j]){
39                     if (father(i)!=father(j)){
40                             flag=0;break ;
41                     }
42                 }
43             }
44             if (!flag)
45                 break ;
46         }
47         if (!flag){
48             printf ("The door cannot be opened.\n");
49             continue ;
50         }
51         int c,r;//cout<<"error"<<endl;
52         c=1;r=1;
53         for (int i=0;i<26;i++){
54             int temp=0;
55             for (int j=0;j<26;j++){
56                 temp+=g[i][j]-g[j][i];
57             }
58             if (temp==1&&c)
59                 c=0;
60             else if (temp==-1&&r)
61                 r=0;
62             else if (temp==0) ;
63             else {
64                 flag=0;
65                 break ;
66             }
67         }
68         if (flag)
69             printf ("Ordering is possible.\n");
70         else printf ("The door cannot be opened.\n");
71     }
72     return 0;
73 }
posted on 2014-07-21 18:55  gfc  阅读(158)  评论(0编辑  收藏  举报