[템플릿] 분형 그래프 최대 매칭 알고리즘과 헝가리

. (1)  BOOL DFS는 ( INT U)
 2  {
 3.       (I = iterator_t G [U] .begin () ;! G = I [U] .END ()는 I ++) { // U 각 인접 포인트 
. (4)          의 INT V = 가장자리 [* I]를 .TO]
 . 5          IF (!는 [V] 체크) {      //이 경로를 주장하지 교대 
. 6              체크인 [V] =  ; //는 대체 경로를 넣어 
7.              IF (일치 [V] == - . 1 || DFS (일치 [V])) {
 8.                  // 포인트가 포함되지 않으면, 설명 된 대체 경로가 경로 전환 경로를 보강하고, 성공 반환으로 
9.                  매칭을 [V] = U;
 10                 매칭은 [U] = V]
 . (11)                   에 해당하는 ,
 12이다              }
 13이다          }
 14      }
 15       은 false ; // 경로를 보강하면 고장 회수없는 
(16)  }
 (17).  
(18)는  INT 헝가리어 ()
 19.  {
 20는      INT ANS = 0 ;
 21이다      memset 함수 ( 매칭 - 1. , sizeof의 (매칭))
 (22)가      대해 ( INT U = 0 , U <num_left; ++ U) {
 23은          IF(일치 [U] == - 1. ) {
 24              memset 함수는 (체크 0 , sizeof의 (확인))
 25              IF (DFS (U))
 (26)이다                  ++ ; ANS
 27          }
 28      }
 29      리턴 ANS;
 30  }
 31 인  // https://www.cnblogs.com/wangjunyan/p/5563154.html 
32  // 인접 행렬 아래 임계 표 상단
 (33)이  
34 인  
35  @ 된 그래프 
(36)  #DEFINE MAXN 10 //는 X 및 Y 정점 세트들의 세트를 나타낸다 최대 수! 
37   INT NX, NY; //X 정점 세트 수와 Y의 세트 
(38)는   INT , 에지 [MAXN] MAXN] // 에지 [I] [J]을 IJ에 나타내는 매칭 될 수있다 
(39)   INT CX [MAXN, CY [MAXN]; // 로를 이는 기록 설정 x 및 y 요소에 맞게! 
40   INT는 [MAXN] 방문; // 정점이 방문 여부를 기록 할! 
41는   INT의 경로 ( INT U)
 (42)가  {
 43는       INT의 V;
 44 인       위해 (V = 0 , V <NY; V ++ )
 45       {
 (46)는           IF (! 에지 [U]을 [V] &&는 [V] 방문한)
 47           {
 48               구경 [ V = 1이다. ]
 (49)             IF (CY [V] == - 1 개 || 경로 (CY [V])) // 컬렉션 소자 V y를 일치 또는 이미 매치 V 있지만 CY에서 발견 할 수없는 경우 [V]을 증대시키는 경로 
50               {
 51은                   CX [U] = ; V
 (52)가                   CY [V] = U,
 53는                    . 1 ;
 54이다               }
 55           }
 56이다       }
 (57)이       복귀  0 ,
 58  }
 59   INT maxmatch ()
 60  {
 61는       INT RES = 0 ;
 62이다       memset 함수 ( CX, 0xff가 , sizeof 연산자(CX)의); // -1 초기 값이 일치하지 않는 요소들의 두 세트를 의미한다! 
63은       memset 함수 (CY, 0xFF로 , sizeof의 (CY)),
 64        ( INT I = 0 ; I <= NX; I ++ )
 65       {
 66           IF (CX [I]를 == - . 1 )
 67           {
 68               memset 함수 (방문 0 , sizeof의가 ) (visitited)
 69               RES = + ) 경로 (I
 (70)           }
 (71)이다       }
 72       리턴 RES를,
 (73)이다  }
 74   //https://www.cnblogs.com/shenben/p/5573788.html

 

추천

출처www.cnblogs.com/xiaobuxie/p/11391871.html