单词接龙

来源:互联网 发布:网络机顶盒性价比 编辑:程序博客网 时间:2024/04/29 05:13

单词接龙
拉姆刚开始学习英文单词,对单词排序很感兴趣。
如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同。
你能编写一个程序来帮助拉姆进行判断吗?

输入描述:

输入包含多组测试数据。 对于每组测试数据,第一行为一个正整数n,代表有n个单词。 然后有n个字符串,代表n个单词。 保证: 2<=n<=200,每个单词长度大于1且小于等于10,且所有单词都是由小写字母组成。



输出描述:

对于每组数据,输出"Yes"或"No"


输入例子:
  3  abc  cdefg  ghijkl  4  abc  cdef  fghijk  xyz  

输出例子:
  Yes  No  


#include<iostream>#include<string>#include<queue>using namespace std;int canArrangeWords(int num, string* arr){if (num<1 || num>100)return -1;queue<string> qs;for (int i = 0; i < num; i++){qs.push(arr[i]);int len = arr[i].size();if (len<2 || len>100)return -1;}int count = 1;int count1 = 0;char head = qs.front().at(0);char end = qs.front().at(arr[0].size() - 1);qs.pop();while (!qs.empty() && (count + count1 <= num)){int len = qs.front().size();if (qs.front().at(0) == end){end = qs.front().at(len - 1);qs.pop();count++;}else if (qs.front().at(len - 1) == head){head = qs.front().at(0);qs.pop();count++;}else{qs.push(qs.front());qs.pop();count1++;}}if (count == num)return 1;return -1;}int main(){int num;while (cin >> num){getchar();string *s = new string[num];for (int i = 0; i < num;i++){getline(cin,s[i]);}int res = canArrangeWords(num,s);if (res == 1)cout << "YES" << endl;elsecout << "No" << endl;}}


1 0
原创粉丝点击