1の#include <stdio.hの> 2の#include <STDLIB.H> 3の#include < 文字列・H> 4 の#define INF 0x3f3f3f3f 5 INT [マップ1000年 ] [ 1000年 ]、MAP2 [ 1000年 ] [ 1000 ]。 6 INT N。 7 ボイドfloyed() 8 { 9 INT I、J、K。 10 のための(K = 0 ; K <N、K ++ ) 11 { 12 のために(私は= 0、I <N; I ++ ) 13 { 14 用(J = 0 ; J <N; J ++ ) 15 { 16 であれば(マップ[I] [J]>マップ[I] [K] + マップ[K] [J]) 17 { 18 地図[I] [J] =マップ[i]が[K] + マップ[K] [J]。 19 MAP2 [I] [J] = MAP2 [I] [K] + MAP2 [K] [J]。 20 } 21 そう であれば(マップ[I] [J] ==マップ[I] [K] + マップ[K] [J]) 22 { 23 であれば(MAP2 [I] [J]> MAP2 [I] [K ] + MAP2 [K] [J]) 24 MAP2 [I] [J] = MAP2 [I] [K] +MAP2 [K] [J]。 25 26 } 27 } 28 } 29 } 30 } 31 のint main()の 32 { 33 INT T。 34 のscanf(" %dの"、&T)。 35 一方(T-- ) 36 { 37 のint M、開始、終了、A、B、C、D。 38 のscanf(" %D%D "、&N、&M)。 39 のscanf(" %D%D "、&開始、および終了)。 40 のmemset(マップ、INF、はsizeof (MAP))。 41 のmemset(MAP2、0、はsizeof (MAP2))。 42 一方(M-- ) 43 { 44 のscanf(" %D%D%D%D "、&、&B、&C&D)。 45 地図[A] [B] =マップ[B] [A] = C。 46 MAP2 [A] [B] = MAP2 [B] [A] = D。 47 } 48 floyed(N) 49 のprintf(" %D%D \ N "、マップは、[終了] MAP2を[開始] [開始] [終了])。 50 } 51 リターン 0 。 52 }