hdu 1181 变形课
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int len,map[26][ 26 ],des[26],a,b,f = 0,m;
char ch[1000];
void DFS( int n )
{
if( f )
return ;
if( n == 'm' - 'a' )
{
f = 1;
return;
}
for( int i = 0; i < 26 ; ++i )
{
if( n != i && map[n][i] == 1 )
{
if( des[ i ] == 1 )
return;
des[ i ] = 1;
DFS( i );
des[ i ] = 0;
}
if( f )
return ;
}
}
int main( )
{
while( scanf( "%s",ch ) && ch[ 0 ] != '0' )
{
memset( des,0,sizeof( des ) );
memset( map,0,sizeof( map ) );
f = 0;
len = strlen( ch );
a = ch[ 0 ] - 'a';
b = ch[ len - 1 ] - 'a';
map[ a ][ b ] = 1;
while( scanf( "%s",ch ) && ch[ 0 ] != '0' )
{
len = strlen( ch );
a = ch[ 0 ] - 'a';
b = ch[ len - 1 ] - 'a';
map[ a ][ b ] = 1;
}
DFS( 1 );
f == 1 ? printf( "Yes.\n" ) : printf( "No.\n" );
}
return 0;
}
这题考察遍历图的DFS操作,此题需注意要剪枝,否则会栈溢出;
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号