zoukankan      html  css  js  c++  java
  • POJ1386+欧拉回路

    View Code
     1 #include<cstdio>
     2 #include<vector>
     3 #include<iostream>
     4 #include<cstdlib>
     5 #include<cstring>
     6 using namespace std;
     7 int in[30],out[30],vis[30];
     8 int n;
     9 
    10 vector<int> edge[27];
    11 
    12 void dfs(int s){
    13     vis[s]=1;
    14     for(int i=0;i<edge[s].size();i++)
    15         if(vis[edge[s][i]]==0)
    16             dfs(edge[s][i]);
    17     return ;
    18 }
    19 
    20 bool euler(int s){
    21     int i;
    22     memset(vis,0,sizeof(vis));
    23     dfs(s);
    24     for(i=0;i<26;i++){
    25         if(vis[i]==0&&edge[i].size()!=0)
    26             return false;
    27     }
    28     return true;
    29 }
    30 
    31 int main(){
    32     int t,n,i,j,len;
    33     char str[1010];
    34     scanf("%d",&t);
    35     while(t--){
    36         scanf("%d",&n);
    37         memset(in,0,sizeof(in));
    38         memset(out,0,sizeof(out));
    39         for(i=0;i<26;i++)
    40             edge[i].clear();
    41         while(n--){
    42             cin>>str;
    43             len=strlen(str);
    44             len--;
    45             out[str[0]-'a']++;
    46             in[str[len]-'a']++;
    47             edge[str[0]-'a'].push_back(str[len]-'a');
    48             edge[str[len]-'a'].push_back(str[0]-'a');
    49         }
    50 
    51         //search the eulerian path
    52         if(euler(str[0]-'a')==false){
    53             cout<<"The door cannot be opened."<<endl;
    54             continue;
    55         }
    56         int f1=0,f2=0;
    57         for(i=0;i<26;i++){
    58             if(in[i]!=out[i]){
    59                 if(in[i]<out[i]){
    60                     if(out[i]-in[i]==1&&f1==0)
    61                         f1=1;
    62                     else
    63                         break;
    64                 }
    65                 if(out[i]<in[i]){
    66                     if(in[i]-out[i]==1&&f2==0)
    67                         f2=1;
    68                     else
    69                         break;
    70                 }
    71             }
    72         }
    73 
    74         if(i==26)
    75             cout<<"Ordering is possible."<<endl;
    76         else
    77             cout<<"The door cannot be opened."<<endl;
    78     }
    79     return 0;
    80 }
    keep moving...
  • 相关阅读:
    jq 判断单选是否选中
    C# Split 分隔符为字符串及空格的处理
    MSSQL中的bit类型
    js 判断textarea 不为空
    [转]C#中out 及 ref 区别
    [转]asp.net中时间差的问题
    [转]C# Array 数组 及 一些操作
    Addr、@运算符与Pointer类型
    关于Pascal语言中的分号
    关于以后的文章
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2728643.html
Copyright © 2011-2022 走看看