使用注释掉的string和cin会TLE,使用scanf 和 定 义char类型却不会
[html]
#include
#include
#include
#include
#include
#include
#include
#include
void Dijkstra( int v0 , int end1 , int n )
{
int i , j , k , u ;
memset( used , 0 ,sizeof( used ) ) ;
for( i = 1 ; i <= n ; i++ )
{
dist[ i ] = INF ;
}
dist[ v0 ] = 0 ;
for( i = 1 ; i < n ; i++ )
{
int MIN = INF , u = v0 ;
for( j = 1 ; j <= n ; j++ )
{
if( !used[ j ] && dist[ j ] < MIN )
{
MIN = dist[ j ] ;
u = j ;
}
}
used[ u ] = 1 ;
for( k = 1 ; k <= n ; k++ )
{
if( !used[ k ] && edge[ u ][ k ] + dist[ u ] < dist [ k ] )
{
dist[ k ] = edge[ u ][ k ] + dist[ u ] ;
path[ k ] = u ;
}
}
}
if( dist[ end1 ] == INF )
cout << "-1" << endl ;
else
cout << dist[ end1 ] << endl ;
}
int main()
{
int i , j , k ;
int temp ;
int n ;
// string start , destination ;
// string begin , end ;
char start[ maxn ] , destination[ maxn ] ;
char begin[ maxn ] , end[ maxn ] ;
while(~scanf( "%d" , &n ) )
{
if( n == -1 )
break ;
MAP.clear() ;
temp = 0 ;
scanf( "%s%s" , start , destination ) ;
//cin >> start >> destination ;
if( !MAP[ start ] )
{
temp++ ;
MAP[ start ] = temp ;
}
if( !MAP[ destination ] )
{
temp++ ;
MAP[ destination ] = temp ;
}
for( i = 0 ; i <= maxn ; i++)
for( j = 0 ; j <= maxn ; j++ )
if( i == j)
edge[