соответствие в graph — это набор попарно вершинно-непересекающихся ребер, и он максимален, если покрывает максимально возможное количество вершин в графе. Существуют эффективные алгоритмы поиска таких соответствий, а также реализации (см., например, Boost для примера на C++).
Однако в произвольном графе может быть несколько максимальных паросочетаний; существуют ли реализации алгоритмов, позволяющие перечислить их все? Я бы предпочел реализации на C++, но и другие языки тоже подойдут.