Это похоже на проблему покрытие вершины . Это NP Complete. Один из алгоритмов, который предлагает Википедия:
"Одна алгоритмическая техника, которая работает
здесь называется ограниченное дерево поиска
алгоритм, и его идея заключается в
несколько раз выбрать какую-нибудь вершину и
рекурсивная ветвь, с двумя случаями в
каждый шаг: поместите либо текущий
вершина или все ее соседи в
вершинная оболочка. "
редактировать
вот доказательство того, что решение покрытия вершин решит вашу проблему, при условии, что нет вершины, у которой нет ребра:
(*) Решение покрытия вершин также решает вашу проблему
Для каждого ребра по крайней мере одна из конечных точек выбрана покрытием вершины. Если к каждой вершине подключено хотя бы одно ребро, то все вершины в конечном итоге будут выбраны (либо напрямую, либо в силу соседства с непосредственно выбранной вершиной), решая проблему.
Обратите внимание, что обратное утверждение не выполняется:
(*) Решение вашей проблемы не обязательно решает покрытие вершины.
рассмотрите этот график:
[ ] ----- [X]
¦ ¦
¦ ¦
[ ] ----- [X]
Непосредственно выбранные узлы отмечены знаком «X». Этот график решает вашу проблему, как указано, но левый край не покрыт (так что это не решение для вершинного покрытия).