zoukankan      html  css  js  c++  java
  • 第六章部分例题

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <set>
      4 #include <cstring>
      5 
      6 using namespace std;
      7 
      8 const int maxn=1000;
      9 int UG[maxn][maxn];
     10 int vis[maxn];
     11 char str[1024];
     12 int in[maxn];
     13 int out[maxn];
     14 set<int> s;
     15 unsigned dfs_num=0;
     16 
     17 void dfs(int u)
     18 {
     19     vis[u]=1;
     20     dfs_num++;
     21 
     22     for(int i=0;i<='z'-'a';i++)
     23         if(UG[u][i])
     24             if(!vis[i])
     25                 dfs(i);
     26 }
     27 
     28 int main()
     29 {
     30     s.clear();
     31     memset(UG,0,sizeof(UG));
     32     memset(vis,0,sizeof(vis));
     33     memset(in,0,sizeof(in));
     34     memset(out,0,sizeof(out));
     35 
     36     int n;
     37 
     38     scanf("%d",&n);
     39 
     40     while(n--)
     41     {
     42         memset(str,0,sizeof(str));
     43         scanf("%s",str);
     44 
     45         printf("----%s---
    ",str);
     46 
     47 
     48         if(s.count(str[0]-'a')==0)
     49             s.insert(str[0]-'a');
     50         if(s.count(str[strlen(str)-1]-'a')==0)
     51             s.insert(str[strlen(str)-1]-'a');
     52 
     53         UG[str[0]-'a'][str[strlen(str)-1]-'a']++;
     54         UG[str[strlen(str)-1]-'a'][str[0]-'a']++;
     55 
     56         out[str[0]-'a']++;
     57         in[str[strlen(str)-1]-'a']++;
     58     }
     59 
     60     //find odd
     61     
     62     //if have odd out return it
     63     //if have odd in return it
     64     
     65     printf("%d
    ",s.size());
     66 
     67     int num1=0;
     68     int num2=0;
     69 
     70     for(int i=0;i<='z'-'a';i++)
     71     {
     72         i==0? printf("in:%d",in[i]):printf(" %d",in[i]);
     73     }
     74 
     75     cout<<endl;
     76 
     77     for(int i=0;i<='z'-'a';i++)
     78         i==0? printf("out:%d",out[i]):printf(" %d",out[i]);
     79 
     80     cout<<endl;
     81 
     82 
     83     //计算多少个入度不等于出度
     84     for(int i=0;i<'z'-'a';i++)
     85         if(in[i]!=out[i]) num1++;
     86 
     87 
     88     //大于两个就有问题
     89     if(num1>2)
     90     {
     91         cout<<"NO"<<endl;
     92         return 0;
     93     }
     94 
     95 
     96     //有多少个入度不等于出度的0个?
     97     
     98     
     99     if(num1==0)
    100     {
    101         for(int i=0;i<'z'-'a';i++)
    102         {
    103             if(s.count(i))
    104             {
    105                 dfs(i);
    106 
    107                 if(s.size()==dfs_num)
    108                 {
    109                     cout<<"YES"<<endl;
    110 
    111                     return 0;
    112                 }
    113                 else
    114                 {
    115                     cout<<"NO"<<endl;
    116 
    117                     return 0;
    118                 }
    119             }
    120         }
    121     }
    122 
    123 
    124     //大于两个,进一步判断是否满足条件
    125     if(num1==2)
    126     {
    127         for(int i=0;i<'z'-'a';i++)
    128             if(in[i]!=out[i])
    129             {
    130                 num2=num1;
    131                 num1=i;
    132             }
    133 
    134             printf("num1:%d
    ",num1);
    135             printf("num2:%d
    ",num2);
    136 
    137             if((in[num1]==out[num1]+1 && in[num2]+1==out[num2]) || (in[num2]==out[num2]+1 && in[num1]+1==out[num1]))
    138             {
    139                 for(int i=0;i<'z'-'a';i++)
    140                     if(s.count(i))
    141                     {
    142 
    143                         //标记所有节点判断是否连通
    144                         dfs(i);
    145 
    146                         if(s.size()==dfs_num) cout<<"YES"<<endl;
    147                         else 
    148                             cout<<"NO"<<endl;
    149 
    150                         return 0;
    151                     }
    152             }
    153             else 
    154                 cout<<"NO"<<endl;
    155     }
    156 
    157     return 0;
    158 }
    Yosoro
  • 相关阅读:

    80老婆如何制服老公的
    男人三件事
    抄袭了一篇散文,很适合现在的我.
    讲个小笑话
    博客的性别???测试下!!!
    十八禁 大全 [转载]
    [转载]男人你没房没车,我凭什么嫁给你!
    电脑维修 小产业高利润
    一美女莫名晕倒 被七男强行拖入森林
  • 原文地址:https://www.cnblogs.com/tclan126/p/7340982.html
Copyright © 2011-2022 走看看