function find_augment_path(&$matching, $boy, $girls, $favorites) { foreach ($girls as $girl) { if ($favorites[$boy][$girl] && !in_array($girl, $matching['search'])) { $matching['search'][] = $girl; if (!isset($matching['match'][$girl]) || find_augment_path($matching, $matching['match'][$girl], $girls, $favorites)) { $matching['match'][$girl] = $boy; return true; } } } return false; }
function find_augment_path(&$matching, $x) { foreach ($matching['B'] as $y => $value) { if (in_array($y, $matching['edge'][$x]) && !in_array($y, $matching['search'])) { $matching['search'][] = $y; $matching['T'][] = $y; if (!isset($matching['match'][$y]) || find_augment_path($matching, $matching['match'][$y])) { $matching['match'][$y] = $x; return true; } } } return false; }