HDU - 5952のカウントのクリーク

カウントクリーク

HDU - 5952

OJ-ID:
HDU-5952

著者:
Caution_Xの

提出日:
20191110個の

タグ:
DFS、グラフ

説明モデリング:
点の所与の数、エッジ数、及びXポイントの種類の完全な図番号を求め

、それを解決するための主要なステップ:
(1)出発点として点を選択し、ドット記録開始ポイント通信のすべては、DFS(点)は、この時点で存在する2つの完全なグラフ
(2)トラバース(1)、部位指向性通信のために選択された場合に設定完全グラフ、DFS( (1)完全グラフを構成する)が3つのこの時点など完全グラフを有する〜図ポイントができる場合、エンドDFS = Xとき十分図ポイント
(3)リピート(2)すべての点が開始点として使用されるまで、

警告:
各開始点は[2、x]は図の完全な点を含む満たされているので、したがって、異なる出発点の完全なビューを達成するために、Xとは独立しています

ACコード:

書式#include <cstdioを> 
する#include <アルゴリズム> 
書式#include < 文字列の.h> 
の#include <ビットセット>
 使用して 名前空間はstdを、
const  int型 MAXN = 105 ;
int型の、ANS;
BOOL MP [MAXN] [MAXN]。
/ *
DFSはここで実際には、剪定の多くが含まれている、非常にシンプルになります。ポイントを通過する際に、ポイントのグループは、この点に接続され、参加した識別するだけでなく、平均的にそれを知っているされている、それぞれのポイント浸透は、20を超えることはありません
したがって最大トラバーサルの全体的な複雑さは、C(9,20)* 100であります
* / 
ボイド DFS(INT MX、INT V []、INT {CNT)
     INT NXT [MAXN];
     IF(CNT == S){ANS ++; リターン;}
     ためINT I = 0 ; I <MX; I ++){            // 点から形成される基をポイントすることができる列挙はすべての点群についてCNT CNT + 1 
        INT LEN = 0 ;
         のためのINT J = I + 1、J <MX、J ++ ){
             IF(MP [V [I] ] [V [J]]){     // 全て"候補点"は連隊に接続されなければならない点を選択した 
                NXT [LEN ++] = V [J]と、
            }
        }
        DFS(NXT CNTと称する + 1 )。
    }
}
INT のmain(){
     int型T、N、M、U、V。
   // freopenは( "in.txt"、 "R"、STDIN)。
    scanf関数(" %のD "、&T)。
    一方、(T-- ){
        scanf関数(" %D%D%D "、&​​N、&M&S)。
        memset(MP、0はsizeof (MP))。
        以下のためにINT iが= 0 ; I <Mを、I ++ ){
            scanf関数(" %D%D "、&​​U&V);
            mp[u][v]=mp[v][u]=1;
        }
        ANS = 0 ;
         int型 NXT [ 105 ];
         のためのINT I = 1 ; I <= N; I ++){       // 列挙各点、この時点で検索を開始するためにグループに依頼しなければならない点
            INT LEN = 0 ;
             のためのINT J = I + 1、J <= N; J ++ ){
                 IF(MP [I] [J]){       // 全て"候補点"連隊ポイントを選択したために接続されなければならない 
                    [NXTを++ LEN = J。
                }
            }
            DFS(NXTと呼ぶ、1 )。
        }
        printf(" %dの\ n " 、ANS)。
    }
    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/cautx/p/11874528.html