. (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