poj1502 MPI大混乱(単一始点最短経路)

質問の意味:一見すると最小出力の面が出力されますが、精密検査だけで訪問したので、最小値が過ごしたすべての時間をポイントツーポイント1からの最小値が、実際には、これらのノードの最大値を訪問することですされていることが分かりますポイントにアクセスする最大時間は、すべての点を考慮しました。だから、ほとんどの短絡の最大値を求めました。

書式#include <iostreamの> 
の#include <CStringの> 
の#include <cstdioを>
 使用して 名前空間はstd; 

const  int型 MAXN = 100 + 5 const  int型 INF = 0x3f3f3f3f int型nは、[MAXN] [MAXN]融点、[MAXN] DIS。
BOOL VIS [MAXN]。
インラインint型の最大値(int型int型B){
     返す > bは?A:B; 
} 

インラインINT分(INT A、INT B){
     戻り <bは?A:B; 
} 

インラインINT をDij(){ 
    memsetの(VIS、0はsizeof (VIS))。
    memset(DIS、INF、はsizeof (DIS))。
    DIS [ 1 ] = 0 ;
    int型 i = 1 ; iがN <I ++は{)
         INT minid、MIN = INF。
        以下のためのint型 J = 1 ; J <= nであり、j ++)の場合(!VIS [J] && MIN> DIS [J])MIN = DIS [minid = J]; 
        VIS [minid] = 1 以下のためのint型 J = 1 ; J <= N。J ++)であれば!(VIS [J])DIS [J] =分(DIS [J]、[minid] + DIS )[minid] [j]を融点; 
    } 
    int型のRES = - INFと、
    以下のためにint型 I = 2 ; iが++; iが<= N 
        RES = MAX(RES、DIS [I])。
    リターンのres; 
} 

int型のmain(){
     // freopenは( "in.txt"、 "R"、STDIN)。
    scanf関数(" %のD "、&N)
    以下のためにint型 I = 2 ; iが<= N; iは++ のためにint型 J = 1 ; J <I。J ++ ){
             チャー S [ 10 ]。
            scanf関数(" %sの" 、S);
            もし(S [ 0 ] == ' X ')MP [I] [J] =融点[J] [I] = INF。
            {
                 INT W = 0 int型のk = 0 ; S [k]は、++ k個){ 
                    W * = 10 
                    W + S = [K] - ' 0" ; 
                } 
                MP [I] [J] =融点[J] [I] = W。
            } 
        } 
    のprintf(" %d個の\ n " 、をDij())。

    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/WAautomaton/p/10947317.html