HDUOJ 1181変形レッスン


変形レッスン
Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 3610Accepted Submission(s): 1220
Problem Description
ええと、変形の授業でハリーはちょっと困ったことがありました.彼はHermioneのようにすべての呪文を覚えることができないので、勝手に野球をハリネズミに変えるなんて、変形呪文の統一的な法則を発見しました.もし呪文がaの冒頭のbで終わる単語であれば、その役割はちょうどA物体をB物体にすることです.
Harryはすでに彼のできるすべての呪文を1つの表に並べて、彼はあなたに彼が先生の宿題を完成できるかどうかを計算してもらいたいと思って、1つのB(ball)を1つのM(Mouse)に変えて、あなたは知っていて、もし彼自身が完成できないならば、彼はHermioneに教えてもらうしかなくて、しかもたくさんのよく勉強する道理を聞かなければなりません.
Input
テストデータには複数のグループがあります.各グループには複数の行があり、各行に1つの単語があり、小文字のみを含み、Harryができるすべての呪文である.数字0は入力の終わりを表す.
Output
ハリーが彼の宿題を完成できるなら「Yes.」を出力し、そうでなければ「No.」を出力する(無視しない句号)
Sample Input

  
so soon river goes them got moon begin big 0

Sample Output

  
Yes.
Hint
Hint
Harry :"big-got-them".

#include
#include
using namespace std;
struct{
char beg;
char end;
}M[101];
bool hash[101],f;
int N;
bool DFS ( char ch )
{
if ( f )
return true;
if( ch == 'm' )
{
f = true;
return true;
}
for ( int i = 0; i < N;++ i )
if ( M[i].beg == ch && !hash[i] )
{
hash[i] = true;
DFS ( M[i].end );
hash[i] = false;
}
return false;
}
int main ()
{
string str;
while ( cin >> str )
{
N = 0;
f = false;
memset ( hash, 0 , sizeof ( hash ) );
while ( str != "0")
{
M[N].beg = str[0];
M[N].end = str[ str.size() - 1 ];
N++;
cin >> str;
}
DFS ( 'b' );
puts ( f ? "Yes.": "No.");
}
return 0;
}