• 杭电1181--变形课(Dfs)


    变形课

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
    Total Submission(s): 18149    Accepted Submission(s): 6520


    Problem Description
    呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
    Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
     

     

    Input
    测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.
     

     

    Output
    如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)
     

     

    Sample Input
    so
    soon
    river
    goes
    them
    got
    moon
    begin
    big
    0
     

     

    Sample Output
    Yes.
     
    Hint
    Hint
    Harry 可以念这个咒语:"big-got-them".
     

     

    Source
     

     

    Recommend
    JGShining   |   We have carefully selected several similar problems for you:  1175 1010 1180 1258 2553 
     
    RE: ab + bc == ac; (题目较水, 但不一定会有思路).
     1 #include <cstdio> 
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 const int maxn = 1000 + 10;
     6 int used[maxn]; char ch[maxn]; int i;
     7 
     8 struct node
     9 {
    10     char top, rear;    
    11 } a[maxn];
    12 
    13 int flag;
    14 
    15 void dfs(int j)
    16 {
    17     if(a[j].rear == 'm')
    18     {
    19         flag = 1;
    20         return;    
    21     }    
    22     for(int k = 0; k < i; k++)
    23     {
    24         if(a[j].rear == a[k].top && used[k] == 0)
    25         {
    26             used[k] = 1;
    27             dfs(k);
    28         }
    29     }
    30 }
    31 
    32 int main()
    33 {
    34     while(cin >> ch)
    35     {
    36         memset(used, 0, sizeof(used));
    37         i = 0;
    38         if(ch[0] != '0')        //取首尾字母; 
    39         {
    40             int len = strlen(ch);
    41             a[i].top = ch[0];
    42             a[i].rear = ch[len-1];
    43             i++;    
    44         }    
    45         while(cin >> ch)
    46         {
    47             if(ch[0] != '0')    ////取首尾字母; 
    48             {
    49                 int len = strlen(ch);
    50                 a[i].top = ch[0];
    51                 a[i].rear = ch[len-1];
    52                 i++;
    53             }
    54             else 
    55                 break;
    56         }
    57         flag = 0;
    58         for(int j = 0; j < i; j++)
    59         {
    60             if(a[j].top == 'b')
    61             {
    62                 used[j] = 1;
    63                 dfs(j);
    64             }
    65         }
    66         if(flag)
    67             printf("Yes.
    ");
    68         else
    69             printf("No.
    ");
    70     }    
    71     return 0;
    72 } 
    73  
     
     
  • 相关阅读:
    VMware安装最新版CentOS7图文教程
    git 本地给远程仓库创建分支 三步法
    git如何利用分支进行多人开发
    题解 洛谷P6478 [NOI Online #2 提高组] 游戏
    题解 CF1146D Frog Jumping
    题解 洛谷P6477 [NOI Online #2 提高组] 子序列问题
    题解 LOJ2472 「九省联考 2018」IIIDX
    题解 CF1340 A,B,C Codeforces Round #637 (Div. 1)
    题解 LOJ3284 「USACO 2020 US Open Platinum」Exercise
    windows上的路由表
  • 原文地址:https://www.cnblogs.com/soTired/p/4709201.html
Copyright © 2020-2023  润新知