问题标题: 酷町堂:阶段考试5题

0
0
已解决
赵逸凡
赵逸凡
初级启示者
初级启示者
题目描述 Description
酷町猫和她的好朋友酷町喵一起学习英语单词,她们一共学习了n个不同的单词,现在她们在一起玩单词接龙!
随着她们学过的词汇变多,所以在单词接龙的过程中,她们希望每个单词都要被并且只能被使用1次。
请你帮助她们判断能否做到。

输入描述 Input Description
多组测试数据,对于每组测试数据
第一行,一个正整数n,表示单词数
接下来n行,每行一个由小写字母组成的单词

输出描述 Output Description
对于每组测试数据,如果可以输出"yes",否则输出"no"

样例输入 Sample Input
3
a
ab
ba
4
a
ab
be
bc
样例输出 Sample Output
yes
no
数据范围及提示 Data Size & Hint
每组接龙,词语数不超过20

这道水题的正解应该是lyh所说的哈密尔顿回路模板题,他说可以把单词首看做一个结点,单词尾看做一个结点,然后通过输入给出的关系建立有向图,然而我是纯字符串模拟,按照题目的规则:不许出现重复单词、首尾必须相连

#include<iostream>
#include<string>
using namespace std;
int n,f;
string str[1000];
int main()
{
	while(cin>>n)
	{
		getline(cin,str[1]);
		for(int i=1;i<=n;i++)
			getline(cin,str[i]);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				if(j!=i&&str[i]==str[j])
				{
					f=1;
					break;
				}
			}
		for(int i=2;i<=n;i++)
			if(str[i].substr(0,1)!=str[i-1].substr(str[i-1].size()-1,1))
			{
				f=1;
				break;
			}
		if(f==1)
			cout<<"no\n";
		else
			cout<<"yes\n";
		f=0;
	}
	return 0;
}

处理cin的问题是按老师的方法用getline读掉回车符的,然而WA 88分

 

求帮助看哪里错了

赵逸凡在2020-08-12 20:52:07追加了内容

赵逸凡在2020-08-12 20:52:53追加了内容


0
已采纳
刘景程
刘景程
新手光能
新手光能

老师说不用首尾相连

再说也不是哈密尔顿

这不是经典的欧拉吗

(哈密尔顿是每个点只经过一次,欧拉是每条边。把尾字母和首字母抽象成点)

0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

@刘景程 @王源松 @李源徽 @黄子扬 

 

 

 

 

我要回答