单词接龙

原创 2016年08月29日 20:08:48

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

输入描述:

输入包含多组测试数据。 对于每组测试数据,第一行为一个正整数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;
		else
			cout << "No" << endl;
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HRBUST1213 单词接龙

单词接龙  单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时...

[编程题]单词接龙

[编程题]单词接龙
  • csulfy
  • csulfy
  • 2016年08月17日 18:22
  • 860

【JZOJ 3852】 单词接龙

DescriptionBsny从字典挑出N个单词,并设计了接龙游戏,只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来。 Bsny想要知道在所给的所有单词中能...

WIKI天梯【1018 单词接龙 】

题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行...

[NOIP2000P4]单词接龙

#include #include #include using namespace std; char start; string wod[21]; int vis[21]; int an...
  • D____
  • D____
  • 2017年04月21日 15:28
  • 217

lintcode,单词接龙

给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列 比如: 每次只能改变一个字母。 变换过程中的中间单词必须在字典中出现。 注意事项 如果没有转换序列则返...
  • zsjmfy
  • zsjmfy
  • 2016年12月22日 14:23
  • 504

OpenJudge 2.5-8783 单词接龙

Description 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现...

Noip2000 T3 单词接龙

题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重...
  • keshuqi
  • keshuqi
  • 2016年08月10日 20:18
  • 618

JZOJ 3852. 【NOIP2014八校联考第2场第2试9.28】单词接龙(words)

DescriptionBsny从字典挑出N个单词,并设计了接龙游戏,只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来。 Bsny想要知道在所给的所有单词中能...

蓝桥杯 单词接龙

算法训练 单词接龙   时间限制:1.0s   内存限制:256.0MB        问题描述    单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单词接龙
举报原因:
原因补充:

(最多只允许输入30个字)