zoj1092-Arbitrage

来源:互联网 发布:淘宝店铺被扣了四分 编辑:程序博客网 时间:2024/04/29 09:10

这道题目虽然是理解了书上的代码,然后自己敲出来的,但是仍然收获不少,例如其中处理字符串时保留它的数字,然后来进行判断,条理比较清晰,也初略了解了bellman-ford算法,虽然和Dijkstra的思想完全理解透,还需要努力

#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std ;const int maxn = 50 ;const int maxm = 1005 ;struct exchange{int ci , cj ;double cij ;}ex[ maxm ] ;char name[ maxm ][ maxn ] ;char a[ maxn ] , b[ maxn ] ;double x ;int m , n ;int flag ;double maxdist[ maxm ] ;int readcase(){int i , j , k ;scanf( "%d" , &n ) ;if( n == 0 )return 0 ;for( i = 0 ; i < n ; i++ )scanf( "%s" , &name[ i ] ) ;scanf( "%d" , &m ) ;for( i = 0 ; i < m ; i++ ){scanf( "%s%lf%s" , a , &x ,b ) ;for( j = 0 ; strcmp( a , name[ j ] ) ; j++ ) ;for( k = 0 ; strcmp( b , name[ k ] ) ; k++ ) ;ex[ i ].ci = j ;ex[ i ].cj = k ;ex[ i ].cij = x ;}return 1 ;}void bellman( int v0 ){flag = 0 ;int i , k ;memset( maxdist , 0 , sizeof( maxdist ) ) ;maxdist[ v0 ] = 1 ;for( k = 1 ; k <= n; k++ ){for( i = 0 ; i < m ; i++ ){if( maxdist[ ex[ i ].ci ] * ex[ i ].cij > maxdist[ ex[ i ].cj ] )maxdist[ ex[ i ].cj ] = maxdist[ ex[ i ].ci ] * ex[ i ].cij ;}}if( maxdist[ v0 ] > 1.0 )flag = 1 ;}int main(){int Case = 0 ;while( readcase( ) ){for( int i = 0 ; i < n ; i++ ){bellman( i ) ;if( flag )break;}if( flag )printf( "Case %d: Yes\n" , ++Case ) ;elseprintf( "Case %d: No\n" , ++Case ) ;}return 0 ;} 


原创粉丝点击