zoukankan      html  css  js  c++  java
  • 【搜索】HDU1181:变形课

    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<iostream>
     2 #include<stdio.h>
     3 #include<queue>
     4 #include<string>
     5 #include<string.h>
     6 using namespace std;
     7 const int INF = 0x7fffffff;
     8 int mapp[30][30];
     9 char str[200];
    10 bool vis[30]={false};
    11 void init()
    12 {
    13     for(int i=0;i<26;i++)
    14     {
    15         for(int j=0;j<26;j++)
    16             mapp[i][j]=INF;
    17     }
    18 }
    19 bool bfs(int x)
    20 {
    21     queue<int> q;
    22     while(!q.empty())
    23         q.pop();
    24     q.push(x);
    25     int now=x;
    26     while(!q.empty())
    27     {
    28         now=q.front();
    29         q.pop();
    30         vis[now]=true;
    31         for(int i=0;i<26;i++)
    32         {
    33             if(mapp[now][i]!=INF&&!vis[i])
    34             {
    35                 int next=i;
    36                 if(next==('m'-'a'))
    37                     return true;
    38                 q.push(next);
    39             }
    40         }
    41     }
    42     return false;
    43 }
    44 int main()
    45 {
    46     init();
    47     while(scanf("%s",str)!=EOF)
    48     {
    49         if(strlen(str)!=1&&str[0]!='0')
    50         {
    51             int len=strlen(str);
    52             mapp[str[0]-'a'][str[len-1]-'a']=1;
    53         }
    54         else
    55         {
    56             bool flag=bfs(1);
    57             if(flag)
    58             {
    59                 cout << "Yes." << endl;
    60             }
    61             else
    62             {
    63                 cout << "No." <<endl;
    64             }
    65         }
    66     }
    67     return 0;
    68 }
    View Code
  • 相关阅读:
    意外发现,VC断点可加在构造函数的左括号上
    C++中的INL
    如何用DELPHI编程修改外部EXE文件的版本信
    j2ee面试宝典翻译(1)
    华为总裁任正非:允许小部分力量去颠覆性创新
    QStringList与QString互转
    QTreeView只显示指定驱动器及其目录,隐藏所有兄弟节点
    Protected Functions 是理解OO的难点和关键
    技术人员的创业陷阱:我能,但不管用户在哪里!
    大陆的创业环境和风气的确产生巨大变化,大众创业“蔚然成风”
  • 原文地址:https://www.cnblogs.com/SoulSecret/p/8439941.html
Copyright © 2011-2022 走看看