#include<stdio.h>
#include<string.h>
int M[ 1000 ] [ 1000 ] ;
int Path[ 10000 ] ;
typedef struct
{
char name[ 3 ] ;
int bfs;
int path;
} Graph;
Graph node[ 1000 ] ;
int nodes;
int source,dest;
int Q[ 100000 ] ;
int V[ 101 ] ;
int rear,front;
int empty;
int line;
void enqueue( int x)
{
V[ x] = 1 ;
rear = ( rear+ 1 ) % 100000 ;
Q[ rear] = x;
}
int dequeue( )
{
if ( ! isEmpty( ) )
{
front = ( front+ 1 ) % 100000 ;
return Q[ front] ;
}
}
int isEmpty( )
{
return front== rear;
}
int find( char str[ 5 ] )
{
int i;
for ( i= 0 ; i < nodes; i++ )
if ( ! strcmp ( str,node[ i] .name ) )
return i;
return - 1 ;
}
int BFS( int start)
{
int v;
int i;
int find = 0 ;
enqueue( start) ;
V[ start] = 1 ;
while ( ! isEmpty( ) )
{
v = dequeue( ) ;
if ( v== dest)
{
return node[ v] .bfs ;
break ;
}
for ( i = 0 ; i < nodes; i++ )
{
if ( M[ v] [ i] &&! V[ i] )
{
V[ i] = 1 ;
node[ i] .bfs = node[ v] .bfs + 1 ;
node[ i] .path = v;
enqueue( i) ;
}
}
}
return 0 ;
}
int main( )
{
int n;
int i,j,k= 1 ;
char t1[ 5 ] ;
char t2[ 5 ] ;
char from[ 5 ] ;
char to[ 5 ] ;
int x,y;
int d = 0 ;
int prev;
int num;
while ( scanf ( "%d" ,& n) == 1 )
{
if ( line! = 0 )
printf ( "\n " ) ;
line++ ;
for ( i= 0 ; i< n; i++ )
{
scanf ( "%s %s" ,t1,t2) ;
if ( find( t1) == - 1 )
strcpy ( node[ nodes++ ] .name ,t1) ;
if ( find( t2) == - 1 )
strcpy ( node[ nodes++ ] .name ,t2) ;
M[ find( t1) ] [ find( t2) ] = M[ find( t2) ] [ find( t1) ] = 1 ;
}
scanf ( "%s %s" ,from,to) ;
source = find( from) ;
dest = find( to) ;
node[ source] .bfs = 0 ;
if ( BFS( source) )
{
Path[ d++ ] = dest;
num = node[ dest] .path ;
while ( num! = source)
{
Path[ d++ ] = num;
num = node[ num] .path ;
}
Path[ d++ ] = source;
for ( i= d- 1 ; i> 0 ; i-- )
printf ( "%s %s\n " ,node[ Path[ i] ] .name ,node[ Path[ i- 1 ] ] .name ) ;
}
else if ( source== dest)
{
}
else
printf ( "No route\n " ) ;
for ( i = 0 ; i < nodes; i++ )
for ( j = 0 ; j < nodes; j++ )
M[ i] [ j] = 0 ;
for ( i = 0 ; i < nodes; i++ )
{
node[ i] .bfs = 0 ;
node[ i] .path = 0 ;
strcpy ( node[ i] .name ,"" ) ;
V[ i] = 0 ;
}
for ( i = 0 ; i < d; i++ )
Path[ i] = 0 ;
for ( i = 0 ; i < 100000 ; i++ )
Q[ i] = 0 ;
source = 0 ;
dest = 0 ;
prev = 0 ;
d = 0 ;
nodes = 0 ;
front = rear = 0 ;
num = 0 ;
}
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CmludCBNWzEwMDBdWzEwMDBdOwppbnQgUGF0aFsxMDAwMF07CnR5cGVkZWYgc3RydWN0CnsKICAgY2hhciBuYW1lWzNdOwogICBpbnQgYmZzOwogICBpbnQgcGF0aDsKICAgCn1HcmFwaDsKR3JhcGggbm9kZVsxMDAwXTsKaW50IG5vZGVzOwppbnQgc291cmNlLGRlc3Q7CmludCBRWzEwMDAwMF07CmludCBWWzEwMV07CmludCByZWFyLGZyb250OwppbnQgZW1wdHk7CmludCBsaW5lOwp2b2lkIGVucXVldWUoaW50IHgpCnsKICAgIFZbeF0gPSAxOwogICAgcmVhciA9IChyZWFyKzEpJTEwMDAwMDsKICAgIFFbcmVhcl0gPSB4Owp9CmludCBkZXF1ZXVlKCkKewogICAgaWYoIWlzRW1wdHkoKSkKICAgIHsKICAgICAgIGZyb250ID0gKGZyb250KzEpJTEwMDAwMDsKICAgICAgIHJldHVybiBRW2Zyb250XTsKICAgIH0KfQppbnQgaXNFbXB0eSgpCnsKICAgIHJldHVybiBmcm9udD09cmVhcjsKfQppbnQgZmluZChjaGFyIHN0cls1XSkKewogICAgaW50IGk7CiAgICBmb3IoaT0wO2kgPCBub2RlcztpKyspCiAgICAgICBpZighc3RyY21wKHN0cixub2RlW2ldLm5hbWUpKQogICAgICAgICAgcmV0dXJuIGk7CiAgICByZXR1cm4gLTE7Cn0KaW50IEJGUyhpbnQgc3RhcnQpCnsKICAgaW50IHY7CiAgIGludCBpOwogICBpbnQgZmluZCA9IDA7CiAgIGVucXVldWUoc3RhcnQpOwogICBWW3N0YXJ0XSA9IDE7CiAgIHdoaWxlKCFpc0VtcHR5KCkpCiAgIHsKICAgICAgdiA9IGRlcXVldWUoKTsKICAgICAgaWYodj09ZGVzdCkKICAgICAgewogICAgICAgICByZXR1cm4gbm9kZVt2XS5iZnM7CiAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGZvcihpID0gMDtpIDwgbm9kZXM7aSsrKQogICAgICB7CiAgICAgICAgIGlmKE1bdl1baV0mJiFWW2ldKQogICAgICAgICB7CiAgICAgICAgICAgIFZbaV0gPSAxOwogICAgICAgICAgICBub2RlW2ldLmJmcyA9IG5vZGVbdl0uYmZzICsgMTsKICAgICAgICAgICAgbm9kZVtpXS5wYXRoID0gdjsKICAgICAgICAgICAgZW5xdWV1ZShpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgIH0KICAgfQogICByZXR1cm4gMDsKICAgCn0KaW50IG1haW4oKQp7CiAgICBpbnQgbjsKICAgIGludCBpLGosaz0xOwogICAgY2hhciB0MVs1XTsKICAgIGNoYXIgdDJbNV07CiAgICBjaGFyIGZyb21bNV07CiAgICBjaGFyIHRvWzVdOwogICAgaW50IHgseTsKICAgIGludCBkID0gMDsKICAgIGludCBwcmV2OwogICAgaW50IG51bTsKICAgIAogICAgCiAgICB3aGlsZShzY2FuZigiJWQiLCZuKT09MSkKICAgIHsKICAgICAgICBpZihsaW5lIT0wKSAgICAgICAgICAgICAKICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgbGluZSsrOwogICAgIAogICAgICAgIGZvcihpPTA7IGk8IG47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgc2NhbmYoIiVzICVzIix0MSx0Mik7CiAgICAgICAgICAgIGlmKGZpbmQodDEpPT0tMSkKICAgICAgICAgICAgICBzdHJjcHkobm9kZVtub2RlcysrXS5uYW1lLHQxKTsKICAgICAgICAgICAgaWYoZmluZCh0Mik9PS0xKQogICAgICAgICAgICAgIHN0cmNweShub2RlW25vZGVzKytdLm5hbWUsdDIpOwogICAgICAgICAgICAKICAgICAgICAgICAgTVtmaW5kKHQxKV1bZmluZCh0MildID0gTVtmaW5kKHQyKV1bZmluZCh0MSldID0gMTsKCiAgICAgICAgfQogICAgICAgIHNjYW5mKCIlcyAlcyIsZnJvbSx0byk7CiAgICAgICAgCiAgICAgICAgc291cmNlID0gZmluZChmcm9tKTsgICAKICAgICAgICBkZXN0ID0gZmluZCh0byk7ICAgICAKICAgICAgICBub2RlW3NvdXJjZV0uYmZzID0gMDsKCiAgICAgICAgaWYoQkZTKHNvdXJjZSkpCiAgICAgICAgeyAKICAgICAgICAgICAKICAgICAgICAgICBQYXRoW2QrK10gPSBkZXN0OwogICAgICAgICAgIG51bSA9IG5vZGVbZGVzdF0ucGF0aDsKICAgICAgICAgICAKICAgICAgICAgICB3aGlsZShudW0hPXNvdXJjZSkKICAgICAgICAgICB7CiAgICAgICAgICAgICAgUGF0aFtkKytdID0gbnVtOwogICAgICAgICAgICAgIG51bSA9IG5vZGVbbnVtXS5wYXRoOwogICAgICAgICAgICAgIAogICAgICAgICAgIH0KICAgICAgICAgICBQYXRoW2QrK10gPSBzb3VyY2U7CiAgICAgICAgICAgZm9yKGk9ZC0xO2k+MDtpLS0pCiAgICAgICAgICAgICAgcHJpbnRmKCIlcyAlc1xuIixub2RlW1BhdGhbaV1dLm5hbWUsbm9kZVtQYXRoW2ktMV1dLm5hbWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKHNvdXJjZT09ZGVzdCkKICAgICAgICB7CiAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICBwcmludGYoIk5vIHJvdXRlXG4iKTsKICAgICAgICAgICAKICAgICAgICAKICAgICAgICBmb3IoaSA9IDA7aSA8IG5vZGVzO2krKykKICAgICAgICAgICBmb3IoaiA9IDA7aiA8IG5vZGVzO2orKykKICAgICAgICAgICAgICBNW2ldW2pdID0gMDsKICAgICAgICBmb3IoaSA9IDA7aSA8IG5vZGVzO2krKykKICAgICAgICB7CiAgICAgICAgICAgbm9kZVtpXS5iZnMgPSAwOwogICAgICAgICAgIG5vZGVbaV0ucGF0aCA9IDA7CiAgICAgICAgICAgc3RyY3B5KG5vZGVbaV0ubmFtZSwiIik7CiAgICAgICAgICAgVltpXT0wOwogICAgICAgIH0KICAgICAgICBmb3IoaSA9IDA7aSA8IGQ7aSsrKQogICAgICAgICAgIFBhdGhbaV09MDsKICAgICAgICBmb3IoaSA9IDA7aSA8IDEwMDAwMDtpKyspCiAgICAgICAgICAgUVtpXSA9IDA7CiAgICAgICAgc291cmNlID0gMDsKICAgICAgICBkZXN0ID0gMDsKICAgICAgICBwcmV2ID0gMDsKICAgICAgICBkID0gMDsKICAgICAgICBub2RlcyA9IDA7CiAgICAgICAgZnJvbnQgPSByZWFyID0gMDsKICAgICAgICBudW0gPSAwOwogICAgfQogICAgcmV0dXJuIDA7Cn0K
compilation info
prog.cpp: In function ‘int dequeue()’:
prog.cpp:28: error: ‘isEmpty’ was not declared in this scope
prog.cpp: In function ‘int BFS(int)’:
prog.cpp:50: warning: unused variable ‘find’
prog.cpp: In function ‘int main()’:
prog.cpp:80: warning: unused variable ‘k’
prog.cpp:85: warning: unused variable ‘x’
prog.cpp:85: warning: unused variable ‘y’
prog.cpp:99: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
prog.cpp:108: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
stdout