У меня есть неориентированный граф со всеми вершинами четной степени. В этом графе есть множество ребер, которые нужно покрыть ровно один раз, и множество ребер, которые не следует покрывать вообще, если только в этом нет крайней необходимости. Мне нужно найти набор из одного или нескольких путей через граф, чтобы все необходимые ребра были покрыты ровно один раз, а количество пройденных нежелательных ребер было минимальным. Ни одно требуемое ребро не может быть пройдено более чем одним путем, но нежелательные ребра могут быть пройдены любым количеством путей. Это не совсем эйлеров путь, потому что есть необязательные ребра.
Длина каждого отдельного пути ограничена максимальным количеством необходимых ребер, которые он может покрыть, хотя путь может покрывать любое количество нежелательных ребер.
Начальные и конечные точки не обязательно должны совпадать, но существует набор возможных начальных точек.
Некоторые из нежелательных ребер совпадают с требуемыми ребрами, то есть пара вершин может иметь между собой как требуемое ребро, так и нежелательное ребро (хотя между данной парой вершин никогда не будет более одного ребра каждого типа). вершины).
С какого алгоритма лучше начать? По сути, я ищу алгоритм, который может найти путь, который пересекает требуемые ребра ровно один раз и избегает нежелательных ребер, когда это возможно (но может проходить их более одного раза, если это необходимо). Я могу опираться на это, чтобы сделать все остальное.