加重最短数、1608羅バレー

#include <cstdioを> 
する#include <iostreamの> 
する#include <CStringの> 
する#include <アルゴリズム>
 使用して 名前空間STDを、
int型 INF = 99999999 ;
int型の電子[ 2001 ] [ 2001 ]、DIS [ 10000000 ]、ブック[ 10000000 ]、ANS [ 1000000 ]。
INT のmain(){
     int型私は、J、N、M、T1、T2、T3、U、V、MMIN。
    scanf関数(" %d個の%のD "、&​​N、&M)。
    (i = 1 ; iは= <N; I ++ のための(J = 1; J <= nであり、j ++ ){
         場合(I == j)は、E [I] [J] = 0 ;
        他の E [i]の[J] = infファイル。
    } 
    もし(M == 0 ){ 
    のprintf(" 無回答" )。
    リターン 0 ; 
    } 
    のための(i = 1 ; I <= M; iは++ 
     { 
        scanf関数(" %D%D%D "、&​​T1、およびT2、およびT3)。
        E [T1]、[T2] = 分(E [T1]、[T2]、T3)。
     } 
    のための(i = 1 ; iが<= N; iが++ 
    DIS [I] = E [1 ] [i]は、
    ANS [ 1 ] = 1DIS [ 1 ] = 0 ;
   (i = 1 ; I <= N- 1、I ++ ){ 
    MMIN = INF。
    U = 0 ; 
    (J = 1 ; J <= nであり、j ++ ){
         場合(ブック[j] == 0 && DIS [J] < MMIN){ 
            MMIN = DIS [J]。
            uが = jは、
        }} 
        もし(U == 0ブレーク
        ブック[U]= 1 ;
        (J = 1 ; J <= nであり、j ++ ){
             場合(ブック[j] == 0 && DIS [J]> DIS [U] + E [U] [J])
            {DIS [J] = DIS [Uを] + E [U] [J]。
               ANS [J] =のANS [U]。
                   } 
               それ以外の 場合(ブック[J] == 0 && DIS [J] == DIS [U] + E [U] [J] && J =!1 
                    ANS [J] + = ANS [U]; 
        } 
   } 
   もし(DIS [N] == INF)のprintf(" 無回答" )。
   printf(" %dの"DIS [N]); 
   のprintf(" %dの、ANS [N]);
     戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/zw130-lzr-blogs/p/10971405.html