Если ваш график имеет несколько различных связанных компонентов, вы можете найти максимальное соответствие в графике, просто найдя максимальное соответствие в каждом из этих компонентов и возвратив их объединение.
Что касается того, как определить наборыX и Y, существует множество алгоритмов для определения того, является ли конкретный граф двудольным, и, если да, для назначения меток узлам для восстановления этих двух групп.Вы можете сделать это с помощью модифицированной DFS или BFS довольно легко.Следовательно, алгоритм для вашей проблемы может быть
- Запустить DFS по всему графику, чтобы разбить его на связанные компоненты.
- Для каждого из этих компонентов:
- Запустите DFS на этих компонентах, чтобы восстановить, какие узлы находятся в группах X и Y.
- Используйте алгоритм максимального двудольного сопоставления, чтобы найти максимальное совпадение в этом компоненте.
- Объедините все результаты вместе, чтобы получить общий ответ.
Надеюсь, это поможет!