變形課
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 3610 Accepted Submission(s): 1220
Problem Description呃......變形課上Harry碰到了一點小麻煩,因為他並不像Hermione那樣能夠記住所有的咒語而隨意的將一個棒球變成刺蝟什麼的,但是他發現了變形咒語的一個統一規律:如果咒語是以a開頭b結尾的一個單詞,那麼它的作用就恰好是使A物體變成B物體.
Harry已經將他所會的所有咒語都列成了一個表,他想讓你幫忙計算一下他是否能完成老師的作業,將一個B(ball)變成一個M(Mouse),你知道,如果他自己不能完成的話,他就只好向Hermione請教,並且被迫聽一大堆好好學習的道理.
Input測試資料有多組。每組有多行,每行一個單詞,僅包括小寫字母,是Harry所會的所有咒語.數字0表示一組輸入結束.
Output如果Harry可以完成他的作業,就輸出"Yes.",否則就輸出"No."(不要忽略了句號)
Sample Input
sosoonrivergoesthemgotmoonbeginbig0
Sample Output
Yes.HintHint Harry 可以念這個咒語:"big-got-them".
#include<iostream><br />#include<string><br />using namespace std;<br />struct{<br /> char beg;<br /> char end;<br />}M[101];<br />bool hash[101],f;<br />int N;<br />bool DFS ( char ch )<br />{<br /> if ( f )<br /> return true;<br /> if( ch == 'm' )<br /> {<br /> f = true;<br /> return true;<br /> }<br /> for ( int i = 0; i < N; ++ i )<br /> if ( M[i].beg == ch && !hash[i] )<br /> {<br /> hash[i] = true;<br /> DFS ( M[i].end );<br /> hash[i] = false;<br /> }<br /> return false;<br />}<br />int main ()<br />{<br /> string str;<br /> while ( cin >> str )<br /> {<br /> N = 0;<br /> f = false;<br /> memset ( hash, 0 , sizeof ( hash ) );<br /> while ( str != "0" )<br /> {<br /> M[N].beg = str[0];<br /> M[N].end = str[ str.size() - 1 ];<br /> N++;<br /> cin >> str;<br /> }<br /> DFS ( 'b' );<br /> puts ( f ? "Yes." : "No." );<br /> }<br /> return 0;<br />}