HDU 3786 找出直系亲属 floyd
这题好悲剧啊,我用floyd做一直不能过,迷惑了我一晚上,改了N个地方还是wa,最后看着大牛代码改终于发现,floyd关系弄错了
#include<stdio.h>
int map[26][26];
void floyd( )
{
for( int i = 0; i < 26; ++i )
for( int j = 0 ; j < 26; ++j )
for( int k = 0; k < 26; ++k )
if( map[j][i] && map[i][k] )
map[j][k] = map[j][i] + map[i][k];//wa所在地
}
void print1( int n )
{
while( n > 2 )
{
--n;
printf( "great-" );
}
if( n == 2 )
printf( "grand" );
printf( "parent\n" );
}
void print2( int n )
{
while( n > 2 )
{
--n;
printf( "great-" );
}
if( n == 2 )
printf( "grand" );
printf( "child\n" );
}
int main( )
{
int m,n;
while( scanf( "%d%d%*c",&n,&m ),m|n )
{
for( int i = 0; i < 26; ++i )
for( int j = 0; j < 26; ++j )
map[i][j] = 0;
while( n-- )
{
char a , b,c;
scanf( "%c%c%c%*c",&a,&b,&c );
a -= 'A';
if( b != '-' )
{
b -= 'A';
map[a][b] = 1;
}
if( c != '-' )
{
c -= 'A';
map[a][c] = 1;
}
}
floyd( );
while( m-- )
{
int a,b;
scanf( "%c%c%*c",&a,&b );
a -= 'A';
b -= 'A';
if( map[a][b] )
print2( map[a][b] );
else if( map[b][a] )
print1( map[b][a] );
else
printf( "-\n" );
}
}
return 0;
}
原先的错误代码
#include<stdio.h>
int map[26][26];
void floyd( )
{
for( int i = 0; i < 26; ++i )
for( int j = 0 ; j < 26; ++j )
for( int k = 0; k < 26; ++k )
{
if( map[i][j] && map[j][k] )
map[i][k] = map[i][j] + map[j][k];
}
}
void print1( int n )
{
while( n > 2 )
{
--n;
printf( "great-" );
}
if( n == 2 )
printf( "grand" );
printf( "parent\n" );
}
void print2( int n )
{
while( n > 2 )
{
--n;
printf( "great-" );
}
if( n == 2 )
printf( "grand" );
printf( "child\n" );
}
int main( )
{
int m,n;
while( scanf( "%d%d%*c",&n,&m ),m|n )
{
for( int i = 0; i < 26; ++i )
for( int j = 0; j < 26; ++j )
map[i][j] = 0;
while( n-- )
{
char a , b,c;
scanf( "%c%c%c%*c",&a,&b,&c );
a -= 'A';
if( b != '-' )
{
b -= 'A';
map[a][b] = 1;
}
if( c != '-' )
{
c -= 'A';
map[a][c] = 1;
}
}
floyd( );
while( m-- )
{
int a,b;
scanf( "%c%c%*c",&a,&b );
a -= 'A';
b -= 'A';
if( map[a][b] )
print2( map[a][b] );
else if( map[b][a] )
print1( map[b][a] );
else
printf( "-\n" );
}
}
return 0;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号