ОБНОВЛЕНИЕ: ответ ниже не является правильным, потому что я ошибочно предположил, что гамильтонов путь лежит в произвольном графе, а не в . Я оставляю его без изменений, возможно, я смогу это исправить или он даст некоторые подсказки для другого ответа.Kn
Я думаю, что это NP-полная. Это очень неформальная / быстрая идея сокращения от 3SAT
Для каждой переменной добавляю «гаджет переменной» с:xi
- три узла Xi,+Xi,−Xi
- два переменных ребра и ( X i , - X i )(Xi,+Xi)(Xi,−Xi)
Добавьте исходный узел и подключите его ко всем переменным X i .SXi
Для каждого предложения добавьте узел C j и соедините его с соответствующими переменными + X i или - X i, которые образуют предложение.CjCj+Xi−Xi
На следующем рисунке изображено: (+x1∨−x2∨−x3)∧(−x2∨x3∨x4)
Множество (узлы , которые должны быть связаны) содержит ( S , C 1 ) , ( S , С 2 ) , . , ,R(S,C1),(S,C2),...
Простой путь должен включать все «СИНИЕ» ребра, кроме переменных ребер ( X i , + X i ) и ( X i , - X i ) (на рисунке выше синие ребра представляют ребра, которые мы включаем в P ).P(Xi,+Xi)(Xi,−Xi)P
На этом этапе исходная формула выполнима тогда и только тогда, когда кратчайший путь от к каждому узлу предложения C j не больше трех. В самом деле, чтобы достичь предложения из S за три шага, мы должны пройти хотя бы одну переменную X i : S → X i → ± X i → C j . Таким образом, мы должны пересечь одно из двух ребер: X i → + X i или X i → - X i ) и включить его в CSCjSXiS→Xi→±Xi→CjXi→+XiXi→−Xi)C(потому что по построению это не часть ). Но оба не могут быть включены, потому что они имеют общую вершину.P
Но мы не уверены, что сможем построить простой путь который включает все синие ребра, потому что некоторые узлы имеют более одного падающего синего ребра.P
Чтобы исправить это, мы заменим каждый узел множеством падающих синих ребер деревом, содержащим только пары падающих синих ребер, которые будут включены в и ребрами, которые их разделяют, и которые должны быть включены в C, чтобы достичь узлов предложения:PC
Исходный график становится:
KCjS
C
P