[羅区P1037] [説明]発生数

キーは、具体的にはコードを見て、要求変換プログラムの性質の問題を解決するために、それがフロイドの変更と考えることができフロイドのアルゴリズムを使用することです。

タイトル

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 }

 

おすすめ

転載: www.cnblogs.com/juruoajh/p/11786000.html