zoj2750-Idiomatic Phrases Game
1918 단어 game
#include<stdio.h>
#include<string.h>
#define MAXN 1000
#define INF 1000000000
struct idiom
{
char front[ 5 ] ,back [ 5 ] ;
int T ;
};
idiom dic[ MAXN ];
int Edge[ MAXN ][ MAXN] ;
int dist[ MAXN ] ;
int S[ MAXN ] ;
int N ;
int main()
{
int i , j , k ;
char s[ 100 ] ;
int len ;
while( scanf( "%d" ,&N ) != EOF )
{
if( N == 0 )
break;
for( k = 0 ; k < N ; k++ )
{
scanf( "%d%s" , &dic[ k ].T , s ) ;
len = strlen ( s ) ;
for( i = 0 , j = len - 1; i < 4 ; i++ , j-- )
{
dic[ k ].front[ i ] = s[ i ] ;
dic[ k ].back[ 3 - i ] = s[ j ] ;
}
dic[ k ].back[4] = dic[ k ].front[ 4 ] = '\0' ;
}
for( i = 0 ; i < N ; i++ )
{
for( j = 0 ; j < N ; j++ )
{
Edge[ i ][ j ] = INF ;
if( i == j )
continue ;
if( strcmp( dic[ i ].back , dic[ j ].front ) == 0 )
Edge[ i ][ j ] = dic[ i ].T ;
}
}
for( i = 0 ; i < N ; i++ )
{
dist[ i ] = Edge[ 0 ][ i ] ;
S[ i ] = 0 ;
}
S[ 0 ] = 1 ;
dist[ 0 ] = 0 ;
for( i = 0 ; i < N - 1; i++ )
{
int min = INF ;
int u = 0 ;
for( j = 0 ; j < N ; j++ )
{
if( !S[ j ] && dist[ j ] < min )
{
u = j ;
min = dist[ j ] ;
}
}
S[ u ] = 1 ;
for( k = 0 ; k < N ; k++ )
{
if( !S[ k ] && Edge[ u ][ k ] < INF && Edge[ u ][ k ] + dist[ u ] < dist[ k ] )
dist[ k ] = dist[ u ] + Edge[ u ][ k ] ;
}
}
if( dist[ N - 1] == INF )
printf( "-1
" ) ;
else
printf( "%d
" , dist[ N -1 ] );
}
return 0 ;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React를 사용한 브라우저 게임이 게시물은 코드에 들어가지 않고 어떻게 수행되었는지 간략하게 설명합니다. 소스 코드를 볼 수 있습니다 플래피 버드와 같은 장애물 회피 게임은 비교적 쉽게 시도할 수 있었습니다. 우주 테마를 추가하고 수직으로 만들면...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.