Huawei社のペンの質問2

nは友人の誰かを探す:
小グループ(データのセット)について、B、友人、Xの親しみやすさであり、bはY、C、友人、親しみやすさがあり、そしてAとCがいない友達である、そしてcが言いました2度友人A、X + Yのフレンドリ度、BはXの、使い勝手の1度の友人であり、
今のデータを入力します。
1行目:例えば2以下のようなT、データのN個のセットの合計の代表;
第それぞれ第一のデータの様々なパラメータを入力します2行3
  列2:M、I、N-;
    。M = 10人のグループを表し、それぞれの人が〜0番号9;
    I = 5の代表的なシーク。米国特許第5、ヒトバディ関係、
    友人2 5号、無出力1の代わりにN-2 =要求、もし、降順使い勝手に応じて、利便同じであれば、人々の数の昇順に並べ;
  ライン3:K = 13最初の数は、13友人関係、友好度の合計の最初のグループを表す0 3 5 0 3及び第5号など、
出力シーケンス中、nのi番目;友人のTが2に等しい場合、2人の関係が出力されるように
2 10 5 2 3 0 ... 13は、後に5省略されています

C ++コード:

書式#include <iostreamの> 
の#include <ベクトル> 
の#include < 文字列 > 
の#include <キュー> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
BOOL CMP(ベクトル< 整数 > A、ベクトル< INT > B){
     戻り [ 1 ]> Bを[ 1 ]。
} 
int型のmain(){
     int型のT。
    CIN >> T;
    int型 ID = 0、ID <T; ID ++ ){
         int型のM、I、N。
        CIN>> M >> I >> N。
        int型のk; 
        cinを >> K;
        // 朋友圈图初始化 
        ベクトル<ベクトル< 整数 >> G(M、ベクトル< INT >(M、0 ));
        以下のためにINT X = 0 ; X <K; X ++ ){
             int型、B、W。
            CIN >> A >> B >> ワット。
            G [A] [B] = G [B] [A] = W。
        } 
        ベクトル < INT >訪問(M、0 ); 
        キュー < 整数 > Q; 

        //友人の初期化
        のためにINT X = 0 ; X <M; X ++ ){
             IF(G [I] [X] =!0 {)
                q.push(X); 
                訪問[X] = G [I] [X ]; 
            } 
        } 
        // BFS
         // 第一層は、n型度は、友人を見つける
        ためにINT X = 1 ; X <N X ++ ){
             int型 LEN = q.size();
             // 第二層、電流友人の端部は、Yの友人を見つけるために、
            のためにint型、Y = 0 ; Y <LEN; Y ++ ){
                 int型、A =q.front(); 
                q.pop(); 
                // 現在のx-探し次度の第三層すべての友人
                のためのINT Z = 0 ; Z <M; Z ++ ){
                     IF(Z = I! G && [A] [Z] =!0 &&訪問[Z] == 0 ){ 
                        q.push(Z); 
                        訪問[Z] =ログイン[A] + G [A] [Z]; 
                    } 
                    IF(訪問![Z] = 0 &&訪問[Z] <ログイン[A] + G [A] [Z])ログイン[Z] =ログイン[A] + G [A] [Z]; 
                } 
            } 
        } 
        ベクトル < 整数 > NDF;
        もし(q.size()== 0 ){ 
            COUT << - 1 << ENDL。続け; 
        } {
             ながら(!q.empty()){ 
                ndf.push_back(q.front())。
                q.pop(); 
            } 
        } 
        int型 max_x = ndf.size()。
        ベクトル <ベクトル< int型 >> 解像度。

        ソート(ndf.begin()、ndf.end()); 

        INT X = 0 ; X <max_xあり; x ++ ){ 
            ベクトル < 整数 >細胞; 
            cell.push_back(NDF [X])。
            cell.push_backは([NDF [X]]をご覧ください)。
            res.push_back(セル)
        } 
        ソート(res.begin()、res.end()、CMP)。
        INT X = 0 ; X <max_xあり; x ++ ){ 
            COUT << RES [X] [ 0 ] << "  " 
        } 
        COUT << ENDL。
    } 
    戻り 0 
} 

/ * 
2 
10 5 2 
13 0 3 5 0 4 9 0 6 8 0 7 5 1 2 6 1〜6 3 2 9 7 3 4 3 3 5 3 3 3 8 3 9 3 5 7 9 7 8 9 
10 0 2
13 0 3 5 0 4 9 0 6 8 0 7 5 1 2 6 1〜6 3 2 9 7 3 4 3 3 5 3 3 3 8 3 9 3 5 7 9 7 8 9 
* /

 

おすすめ

転載: www.cnblogs.com/joelwang/p/11440510.html
おすすめ