hdu 2112 HDU Today
这题真恼火,写完代码后自己测试都能过,就是wa,于是我把代码重新敲了一遍,没想到还是wa,最后只能去找大牛的代码,大牛都是用字典树做的,显然与我的不符,最后在自己的代码上改,终于改到一个地方,在初始化的时候全部从0开始初始化,果断水过
#include<stdio.h> #include<string.h> char word[160][300] = {0},a[300],b[300],start[300],end[300],p,q; int map[160][160],c,des[160],dis[160],n; int inf = 0x7fffffff; int obtain( char str[] )//将地名用数字代替 { int f = 1,pos = 0; for( int i = 2 ; i <= c; ++i ) { if( !strcmp( word[i],str ) ) { f = 0; pos = i; break; } } if( f ) { ++c; strcpy( word[c],str ); pos = c; } return pos; } int Dijkstra( ) { int i ; dis[p] = 0; for( i = 1; i <= c; ++i ) { int min = inf,pos = 0; for( int j = 1; j <= c; ++j ) { if( !des[j] ) if( dis[j] != inf ) if( min > dis[j] ) { min = dis[j]; pos = j; } } des[pos] = 1; if( des[q] ) return dis[q]; for( int j = 1; j <= c; ++j ) { int t; if( !des[j] ) if( map[pos][j] != inf ) if( ( t = map[pos][j] + dis[pos] ) < dis[j] ) { dis[j] = t; } } } if( i > c ) return -1; } int main( ) { while( scanf( "%d",&n ) , n != -1 ) { c = 0; memset( word,160,sizeof( word[0][0] ) ); for( int i = 0; i <= 155; ++i ) { for( int j = 0; j <= 155; ++j ) map[i][j] = inf; des[i] = 0; dis[i] = inf; } scanf( "%s%s",start,end ); for( int i = 1; i <= n; ++i ) { int x,y,val; scanf( "%s%s%d",a,b,&val ); x = obtain( a ); y = obtain( b ); if( val < map[x][y] && x != y ) map[x][y] = map[y][x] = val; } p = obtain ( start ); q = obtain ( end ); if( q == p ) { printf( "0\n" ); continue; } int res = Dijkstra(); printf( "%d\n",res ); } return 0; }
本人还是新手 ,转载请注明来自Lvsi‘s home