キーは、具体的にはコードを見て、要求変換プログラムの性質の問題を解決するために、それがフロイドの変更と考えることができフロイドのアルゴリズムを使用することです。
1つの#include <ビット/ STDC ++ H.> 2 使用して 名前空間STD; 3 列N-; 4 int型のK; 5 6。 BOOL F [ 15 ] [ 15 ]; //はデジタル間の変換かどうかを示す 7。インラインボイドフロイド() 8。 { 9 / * 10 すべての数および接線方向の中間点列挙するここで使用フロイドのアルゴリズム 11を jにiおよびKできk個ことができる場合、 12である 、私Jのエネルギー 13がある * / 14 のために(int型 = K 1、kは< 10 ; K ++ ){ 15 のために(int型 I = 0 ;私は< 10 ; Iは++ ){ 16 のために(INT J = 1。 ; J < 10 ; J ++ ){ 17 IF(F [I] [K] && F [K] [J])F [ I]は[J] = 1 ; 18である } 19 } 20 } 21である } 22が 23である INT CNT [ 15 ]; 24インラインが無効(SOLVE) 25 { 26は / * 27 に変更することができるどのように多くの各数値の計算され 28 / * 29 のために(int型 I = 0 ; iが< 10 ; iが++ ){ 30 F [i]は[I] = 1 。 31 のために(INT J = 0 ; J < 10 ; J ++ ){ 32 であれば(F [I] [J])CNT [I] ++ ; 33 } 34 } 35 } 36 37 のint NUM [ 505 ]。// 高精警告 38 39 のint main()の 40 { 41の IOS :: sync_with_stdio(0); 42 CIN >> N >> K。 43 のために(int型 i = 1 ; iが= Kを<; Iは++ ){ 44 のint X、Yと、 45 CIN >> X >> Y。 46 F [X] [Y]は= 1 。 47 } 48 49 フロイド()。 50 )(SOLVE。 51 52 INT C = 0 。 53 NUM [ 0 ] = 1 。 54 のために(int型 I = 0 ; N [i]はiは++ ){ 55 = C 0 、 56である INT SS = CNT [I] N- - ' 0 ' ]; 57である // 悪高精度 58 のために(INT J = 0 ; Jは、< 500 ; J ++ ){ 59 NUM [J]は、NUMを= [ J] * SS + C、 60 C NUM = [J] / 10 ; 61である NUM [J]%= 10 ; 62である } 63である } 64 // または悪高精度 65 のint I = 500 ; 66 ながら(NUM [I] == 0)i-- 。 67 のために(; I> = 0 ; I - )COUT << NUM [I]。 68 coutの<< てendl; 69 リターン 0 ; 70 }