原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1181
题目大意:
略
思路:
用一个结构体来存放每个单词的首字母和尾子母就可以方便的解决这一问题
其余的和一般的BFS一样
代码如下:
#include <iostream>
#include <cstring>
#include <queue>
#include <string>
using namespace std;
struct Word
{
char fir;
char last;
};
int vis[10000];
bool Find;
int number;
Word letter[10000];
void bfs( )
{
Word Now;
queue<Word> way;
int i;
for ( i = 0; i < number; i++ )
if( letter[i].fir == 'b' )
{way.push ( letter[i] );}
while( !way.empty ())
{
Now = way.front ();
way.pop ();
if( Now.fir == 'm' )
{
Find = true;
return;
}
int i;
for( i = 0; i < number; i++)
{
if( vis[i] == 0 && letter[i].fir ==
Now.last )
{
vis[i] = 1;
way.push ( letter[i] );
}
}
}
}
int main()
{
int i;
string tmp;
number = 0;
while( cin >> tmp )
{
if( tmp == "0" )
{
Find = false;
bfs();
if( Find )
cout<<"Yes."<<endl;
else
cout<<"No."<<endl;
}
else
{
i = tmp.length ();
letter[number].fir = tmp[0];
letter[number].last = tmp[i - 1];
vis[number] = 0;
number++;
}
}
return 0;
}