zoukankan      html  css  js  c++  java
  • zoj2750Idiomatic Phrases Game

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1750

    #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\n" ) ;
    		else
    			printf( "%d\n" , dist[ N -1 ] );
    	}
    	return 0 ;
    }


  • 相关阅读:
    MarkDownPad2 注册码
    如何让你的.vue在sublime text 3 中变成彩色?
    字典树入门
    博弈论
    复杂度问题
    gets scanf以及缓冲区域的问题
    对象
    矩阵转置的一般算法
    二叉树的建立、遍历、叶子节点计数、深度计算
    D
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3076868.html
Copyright © 2011-2022 走看看