二部グラフのみ環が存在しない場合場合、奇数の数字の長さ
上記定理2部グラフ着色決意、O(N + M)の複雑
1つの 空隙 DFS(int型のx、int型の色){ 2 V [X] = 色。 3 用の(int型 I =ヘッド[X]; I; I = NEX [I]){ 4 int型の Y = 版[I]; 5 もし(!V [Y]){ 場合(!DFS(Y、3 -カラー))を返し 偽;} 6 他の 場合(V [Y] ==色)を返す 偽。 7 } 8 リターン 真。 9 } 10 11 int型のmain(){ 12 ブールフラグ= 真。 13 のために(int型 i = 1 ; iが<= N iが++)場合(V [I]!)であれば(DFS(I、!1フラグ=))はfalse 。 14 }
二部グラフマッチングアルゴリズムについて、最も基本的にはハンガリーのアルゴリズムはOの複雑さの増加に一致する、彼は道を増強しているかどうかを確認するために、その都度ポイントを見つけるために、である(N * M)
1 BOOL DFS(INT X){ 2 ための(int型 I =ヘッド[X]; I; I = NEX [I]){ 3 int型、Y = 版[I]; 4 もし(!V [Y]){ 5 V [Y] = 1 。 6 もし(!M [Y] || DFS(M [Y])){ 7 M [Y] =のX。 8 返す 真。 9 } 10 } 11 } 12 } 13 のために(INT I = 1; iが<= N; iは++ ){ 14 のmemsetを(V、0、はsizeof (V))。 15 であれば(DFS(I))は++ ANS 。 16 }
HKアルゴリズムの複雑さは、各々が√Nと一致、(Nドットによる一致最悪の場合にそれがもはや使用N倍になるように、M個のマッチポイントの各々と一致しないが、唯一の√N倍であります√N倍に一致する、各一致が一致に基づいて一致するように1×N Mは一度だけ必要がある場合、それは、唯一√NそれぞれのM *とは、複雑さを√Nし、マッチの最後の数を超えることはできません最悪の場合、Mは反復回数が√N最悪であるように、又はN * 1)は、Mであります
1 BOOLの検索(INT X){ 2 / * 右の深さまでのすべての左側の検索+1点であり、これは、拡張増強パスかどうかを確認するために、パスを増強を探しに相当する* / 3。 ための(int型私は= 0 ;私はGを<[X] .size();私は++ ){ 4。 INT Y = G [X] [I]、 5 IF!(VIS [Y] && Dyを[Y] == DX [X] + 。1 ){ 。6 VIS [Y] = trueに、 7 IF {MX [X] = Y;私[Y]はXの=(!私[Y] ||)(マイ[Y]を見つける。)リターン trueに;} 。8 } 。9 } 10 リターン 偽; 11 } 12 13 int型の一致(){ 14 / * 初始化* / 15 のmemset(MX、0、はsizeof (MX))。 16 のmemset(私の、0、はsizeof (私の)); 17 INT ANS = 0 。 18 一方(真){ 19 / * 初始化* / 20 ブールフラグ= 偽。 21 一方(q.size())q.pop(); 22 のmemset(DX、0、はsizeof(DX))は、 23である のmemset(Dyを、0、はsizeof (のDy)); 24 / * 全てのキューに不一致点を左* / 25 フォア(I、1)、NXをIF!(MX [P [I] ])q.push(P [I]); 26である * / 全て非マッチング点BFSは、すべてのタップ層の数* / 27 ながら(q.size()){ 28 INT X = q.front() ; q.pop(); 29 用(INT I = 0 ;私はGを<[X] .size();私は++ ){ 30 INT Y = G [X] [I]、 31は IF(!Dyを[Y]) { 32 DY [Y] = DX [X] + 1 ; 33は、 / * すべての一致点は層数が一致し続ける* / 34である IF(マイ[Y])DX [マイ[Y] = DY [Y] + 。1 、q.push(マイ[Y]); 35 他のフラグに= trueに; 36 } 37 } 38である } 39 IF(フラグに!)BREAK ; // マッチング点のヌル点が存在することを確認し 40 のmemset(VIS、0、はsizeofは(VIS)); 41は、 フォア(I、1、NX)IF!(MX [P [I]] &&検索(P [I]))ANS ++; 42 } 43 リターン年。 44 }
1つのベクトル< INT > G [N]。 2 int型NX、NY; 3 int型のMX [N]、私[N]; 4キュー< 整数 > Q; 5 int型DX [N]、DYの【のN]。 6 BOOL VIS [N]。