想到了map, mutimap,其实根本不需要那么麻烦,把问题抽象一下,其实就是26 * 26 然后判断可达性
#include <iostream>
using namespace std;
int map[26][26];
int set[26];
char a[10001];
int main()
{
int la,i,j,k;
while(cin>>a)
{
memset(map,0,sizeof(map));
memset(set,0,sizeof(set));
if(a[0]=='0')
{
printf("No.\n");
continue;
}
la=strlen(a);
map[a[0]-'a'][a[la-1]-'a']=1;
while(cin>>a && a[0]!='0')
{
la=strlen(a);
map[a[0]-'a'][a[la-1]-'a']=1;
}
set[1]=1;
for(i=1;i<26;i++)
{
for(j=0;j<26;j++)
{
if(set[j]==0 && map[1][j]==1)
{
set[j]=1;
break;
}
}
if(j==26)
{
break;
}
for(k=0;k<26;k++)
{
if(set[k]==0 && map[j][k]==1)
map[1][k]=1;
}
}
if(map[1][12]==1)
printf("Yes.\n");
else
printf("No.\n");
}
return 0;
}