A - 变形课
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
Input
so soon river goes them got moon begin big 0
Yes.
Harry 可以念这个咒语:"big-got-them".
Hint
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; vector<int>e[30]; //定义一个int型的vector bool flag; bool vis[30]; void dfs(int x) //遍历x { vis[x] = 1; //使vis[x]为1,标明已经遍历过 if(x == 12) //尾字母为m时停止调用,可以输出 { flag = 1; return ; } for(auto & v: e[x]) //将e[x]的值给v { if(!vis[v]) //如果没有遍历过,则进行下一步 dfs(v); } } int main() { string str; while(cin>>str) { flag = 0; memset(vis, 0, sizeof(vis)); //使vis中所有的变量为0 for(int i = 0; i < 30; i++) e[i].clear(); while(str[0] != '0') //表示输入的首字母不为零时开始执行 { int len = str.length(); int be = (int)(str[0] - 'a'); //将字符串的首字母赋值给be int en = (int)(str[len - 1] - 'a'); //将字符串的尾字母赋值给en e[be].push_back(en); //将尾字母的int值放进e[be]中 cin>>str; } dfs(1); //遍历首字母的int值为1时的情况,即首字母为b的时候 if(flag) printf("Yes.\n"); else printf("No.\n"); } return 0; }