Problem Description
呃......變形課上Harry碰到了一點小麻煩,由于他并不像Hermione那樣可以記住全部的咒語而任意的將一個棒球變成刺猬什么的,可是他發現了變形咒語的一個統一規律:假設咒語是以a開頭b結尾的一個單詞,那么它的作用就恰好是使A物體變成B物體.?
Harry已經將他所會的全部咒語都列成了一個表,他想讓你幫忙計算一下他能否完畢老師的作業,將一個B(ball)變成一個M(Mouse),你知道,假設他自己不能完畢的話,他就僅僅好向Hermione請教,而且被迫聽一大堆好好學習的道理.
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. Harry 能夠念這個咒語:"big-got-them".
Hint
Hint水的dfs可是要回溯啦=-=代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int mp[50][50];
char str[10];
bool flag;
void dfs(int x)
{if(x==12){flag=true;return ;}if(flag)return ;for(int i=0;i<26;i++){if(mp[x][i]){mp[x][i]=0;dfs(i);mp[x][i]=1;}}
}
int main()
{while(~scanf("%s",str)){memset(mp,0,sizeof(mp));int x=str[0]-'a';int y=str[strlen(str)-1]-'a';mp[x][y]=1;while(scanf("%s",str)&&str[0]!='0'){int x=str[0]-'a';int y=str[strlen(str)-1]-'a';mp[x][y]=1;}flag=false;dfs(1);if(flag)printf("Yes.\n");elseprintf("No.\n");}return 0;
}
可是=-=臥槽圍觀10行就過的大神=-=main(){ int k=1; char s[100];while(scanf("%s",s)==1){while(scanf("%s",s)&&s[0]!='0');if(k==1)printf("Yes.\n");else printf("No.\n");k++;}
}
汗顏=-=,我還要多練=-=