单词接龙

原创 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;
	}
}


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

【C++心路历程32】【NOIP2000】单词接龙【图论爆搜最长链】

【问题描述】   单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母(不是单词),请你计算以这个字母开头的长度最长的“龙”,每个单词最多在“龙”中出现两次。...
  • ctf109
  • ctf109
  • 2017年07月26日 17:30
  • 546

C++搜索与回溯算法之单词接龙

----------------------*单词接龙*---------------------- Description 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词...
  • C20190413
  • C20190413
  • 2017年07月09日 10:56
  • 374

欧拉回路以及欧拉路径

欧拉回路是指在一个图中存在一个回路使得con
  • ZouCharming
  • ZouCharming
  • 2014年10月30日 22:50
  • 1650

百度笔试题——单词接龙

题目相信大家已经很明确了,我的思路是借助一个栈,将所有单词的首字母和尾字母都入栈,全部入栈后进行判断,需要声明的是,栈顶元素(末单词的尾字母)和栈底元素(首单词的首字母)不需要进行判断。用两个变量接收...
  • poison_biti
  • poison_biti
  • 2016年09月08日 12:42
  • 309

算法训练 单词接龙

思路: 1.算出两两字符串之间的 【 尾首相连】  最小重合部分长度(长度为0不算); 2.用一个大小为n的集合数组arr ,arr[i] 代表【第i个字符串】的【邻接集合】,集合里面存放可以邻接...
  • qq_23044403
  • qq_23044403
  • 2017年05月11日 13:40
  • 291

【NOI OJ】8783 单词接龙

8783:单词接龙 总时间限制: 1000ms 内存限制: 65536kB 描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求...
  • C20190102
  • C20190102
  • 2016年08月25日 14:01
  • 1325

【NOIP2000】单词接龙

1018 单词接龙 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold题目描述 Descriptio...
  • Loi_Shirley
  • Loi_Shirley
  • 2016年08月17日 21:15
  • 1128

[编程题]单词接龙

拉姆刚开始学习英文单词,对单词排序很感兴趣。 如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同。 你能编写一个程序来帮助拉姆...
  • asd8705
  • asd8705
  • 2016年07月12日 19:47
  • 1171

算法训练 单词接龙

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

LintCode-单词接龙II

LintCode-单词接龙II给出两个单词(start和end)和一个字典,找出所有从start到end的最短转换序列 比如: 每次只能改变一个字母。 变换过程中的中间单词必须在字典中出现。注意事项...
  • linside1022
  • linside1022
  • 2017年07月01日 20:27
  • 304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单词接龙
举报原因:
原因补充:

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