hdu 1181变形课(DFS)

                这是一道比较简单的搜索题, 一次AC……大笑

#include<iostream>
#include<algorithm> 
#include<cstring>
using namespace std;
struct Word//定义这个, 避免每次都求单词长度 
{
	char str[20];
	int len;
}word[10000];
bool visited[10000];
int num;
bool cmp(Word a, Word b)
{
	if( strcmp(a.str, b.str)<0 )
		return 1;
	else return 0;
}

int DFS( char ch)
{
	int j=0;
	while( j<num && word[j].str[0]!=ch)
		j++; 
	if( j>=num ) return 0;

	for(j; j<num && word[j].str[0]==ch; j++)
	{
		if( !visited[j] )
		{
			visited[j]=1;
			if( word[j].str[word[j].len-1]=='m') return 1;
			if( DFS( word[j].str[word[j].len-1] ) )
				return 1;
			visited[j]=0;
		}
	}
	return 0;
}
int main()
{
	int i=0, flag=0;
	while( cin>>word[i].str )
	{ 
    	memset(visited,0, sizeof( visited));
		while( word[i].str[0]!='0' )
		{
			word[i].len=strlen( word[i].str );
			i++;
			cin>>word[i].str;
		}

		num=i;//输入单词的个数
		sort(word, word+num, cmp);

		i=0;
		while( word[i].str[0]!='b' && i<num )
			i++; 
		if( i<num )
		{
			for(i; word[i].str[0]=='b' && i<num; i++)
			{
				visited[i]=1;
				if( DFS( word[i].str[word[i].len-1] ) )
				{
					flag=1;
					cout<<"Yes."<<endl;
					break;
				}

				visited[i]=0;
			}
		}

		if( flag==0 ) cout<<"No."<<endl;
		i=0; flag=0;
	} 
}



你可能感兴趣的:(hdu 1181变形课(DFS))