zoukankan      html  css  js  c++  java
  • 变形课hd1181(DFS)

    变形课

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


    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".
     1 #include <stdio.h>
     2 char date[1001][1001];
     3 int visited[1001];
     4 int n;//单词个数
     5 int flag=0;
     6 char find(int m)
     7 {
     8     int i;
     9     char c;
    10     for(i=0;i<1001;i++)
    11      if(date[m][i]=='')       //找到最后面的一个字符
    12       break;
    13 
    14       c=date[m][i-1];
    15     return c;
    16 }
    17 void dfs(int m)//取出首字母为b的位置
    18 {
    19     int i;
    20     char c;
    21     visited[m]=1;
    22     c=find(m);    
    23     if(c=='m')
    24     {
    25         printf("Yes.
    ");
    26         flag=1;
    27     }
    28     else
    29     {
    30         for(i=0;i<n&&visited[i]==0;i++)
    31         {
    32             if(flag==0&&date[i][0]==c)
    33                 dfs(i);
    34         }
    35         visited[m]=0;//剪枝,不需要与自己的比较
    36     }
    37 }
    38 int main()
    39 {
    40     int i=0,j,k;
    41     while(gets(date[i]))
    42     {
    43         if(date[i][0]=='0')
    44         {
    45             for(j=0;j<1001;j++)
    46                     visited[j]=0;       //清零 visted
    47             n=i;i=0;flag=0;
    48             for(j=0;j<n;j++)
    49                 if(date[j][0]=='b')
    50                     dfs(j);
    51                 if(flag==0)
    52                     printf("No.
    ");
    53                 for(j=0;j<1001;j++)
    54                         for(k=0;k<1001;k++)
    55                             date[j][k]=''; 
    56         }
    57         i++;
    58     }
    59 }
  • 相关阅读:
    熟悉常用的HDFS操作
    爬虫大作业-爬取B站弹幕
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    综合练习:词频统计
    理解MapReduce
    熟悉常用的HBase操作
    熟悉常用的HDFS操作
  • 原文地址:https://www.cnblogs.com/a1225234/p/4582010.html
Copyright © 2011-2022 走看看