最も短絡用の854フロイドをAcWing

// 存在しない負のサイクル
 @ エッジの重みは負であってもよい 
の#include <CStringの> 
する#include <iostreamの> 
する#include <アルゴリズム>
 使用して 名前空間、STD
 のconst  int型 N = 210、INF = 1E9;
 INT N-、M、Q。
 INT D [N] [N]; // 隣接行列
ボイドフロイド(){ // 動的プログラミング
    のためのINT K = 1 ; K <= N; K ++ のためのINT I = 1 ; I <= N; ++ I のためにint型J = 1 ; J <= N。J ++ 
                D [i]は[J] =分(D [i]は[J]、D [i]は[K] + D [k]は[J])。
} 

int型のmain(){ 
    scanf関数(" %D%D%D "、&​​N、&M&Q)。
    以下のためにINT iが= 1 ; I <= N; I ++ のためのINT J = 1 ; J <= N; J ++ 場合(I == j)はD [i] [j]が= 0 ; // 处理自环
            他の D [i]は[J] = INF。
    一方、(M - ){
         int型A、B、W。
        scanf関数(" %D%D%D "、&​​、&B&W)。
        D [A] [B] = 分(D [A] [B]、W)。
    } 
    )(フロイド。
    一方、(Q - ){
         int型A、B。
        scanf関数(" %D%D "、&​​、&B)。
        INT T = D [A] [B]。
        もし(T> INF / 2)プット(" 不可能" );
        のprintf(" %d個\ N " 、T);
     

 

 

 

おすすめ

転載: www.cnblogs.com/QingyuYYYYY/p/11842177.html