1. 程式人生 > >【搜索】HDU1181:變形課

【搜索】HDU1181:變形課

got pan closed namespace 好好學習 麻煩 技術分享 content queue

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

【搜索】HDU1181:變形課