zoukankan      html  css  js  c++  java
  • poj 1300 Door Man 欧拉回路

    题目链接:http://poj.org/problem?id=1300

    You are a butler in a large mansion. This mansion has so many rooms that they are merely referred to by number (room 0, 1, 2, 3, etc...). Your master is a particularly absent-minded lout and continually leaves doors open throughout a particular floor of the house. Over the years, you have mastered the art of traveling in a single path through the sloppy rooms and closing the doors behind you. Your biggest problem is determining whether it is possible to find a path through the sloppy rooms where you: 

    1. Always shut open doors behind you immediately after passing through 
    2. Never open a closed door 
    3. End up in your chambers (room 0) with all doors closed 


    In this problem, you are given a list of rooms and open doors between them (along with a starting room). It is not needed to determine a route, only if one is possible. 

    题意:给出一些房间和房间上的门以及房间之间的路径,如果你沿着这条路走到另一个房间,那么就得关掉这条路上的门,关掉的门不能再打开,问能不能从0号房间,在关掉所有门之后刚好走到房间m。

    解法:欧拉回路的判断。

    无向图的欧拉回路:连通无向图中没有度数为奇数个的节点或者有且仅有两个奇数个节点(此时这两个节点必须一个为起点,另一个为终点)。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #define inf 0x7fffffff
     8 using namespace std;
     9 const int maxn=22;
    10 
    11 int m,n,degree[maxn];
    12 char str[maxn],s[maxn];
    13 
    14 int main()
    15 {
    16     while (scanf("%s",str)!=EOF)
    17     {
    18         if (strcmp(str,"ENDOFINPUT")==0) break;
    19         scanf("%d%d",&m,&n);
    20         int a;
    21         memset(degree,0,sizeof(degree));
    22         memset(s,0,sizeof(s));
    23         int cnt=0;
    24         getchar();
    25         for (int i=0 ;i<n ;i++)
    26         {
    27             gets(s);
    28             int len=strlen(s);
    29             if (len==0) continue;
    30             a=0;
    31             int q=0;
    32             for (q=0 ;q<len ;q++) if (s[q]!=' ') break;
    33             for (int j=q ;j<len ;j++)
    34             {
    35                 if (s[j]==' ')
    36                 {
    37                     degree[i] ++ ;
    38                     degree[a] ++ ;
    39                     cnt ++ ;
    40                     a=0;continue;
    41                 }
    42                 a=a*10+s[j]-'0';
    43                 if (j==len-1)
    44                 {
    45                     degree[i] ++ ;
    46                     degree[a] ++ ;
    47                     cnt ++ ;
    48                 }
    49             }
    50         }
    51         scanf("%s",str);
    52         a=0;
    53         int k=-1,k2=-1;
    54         for (int i=0 ;i<n ;i++)
    55         {
    56             if (degree[i]%2)
    57             {
    58                 a++;
    59                 if (k==-1) k=i;
    60                 else k2=i;
    61             }
    62         }
    63         if (a>2 || a==1) printf("NO
    ");
    64         else if (a==2)
    65         {
    66             if ((k==0 && k2==m)||(k==m && k2==0)) printf("YES %d
    ",cnt);
    67             else printf("NO
    ");
    68         }
    69         else if (m==0) printf("YES %d
    ",cnt);
    70         else printf("NO
    ");
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/huangxf/p/4265350.html
Copyright © 2011-2022 走看看