З огляду на графік із зваженими ребрами, як ми можемо знайти негативний цикл, який містить принаймні одну вершину у заданому наборі вершин ? Дякую.
З огляду на графік із зваженими ребрами, як ми можемо знайти негативний цикл, який містить принаймні одну вершину у заданому наборі вершин ? Дякую.
Відповіді:
Якщо вам не потрібно, щоб цикл був простим, тоді розбийте (спрямований) графік на його сильно з'єднані компоненти, і для кожного компонента, що містить одну з заданих вершин , перевірте, чи містить компонент негативний цикл. Якщо жоден компонент не робить, немає жодного негативного циклу, що містить V i . Але якщо якийсь компонент є, ви можете знайти (не простий) негативний цикл, що містить V i , зробивши безліч копій негативного циклу і додавши до цього шляхи до і з якоїсь вершини циклу до V i . (Загальний час на пошук неявного подання потрібного циклу буде таким самим, як час для знаходження негативного циклу у спрямованому графіку, наприклад O ( , якщо я згадую.)
Якщо потрібно, щоб цикл був простим, то проблема стає NP-повною, навіть якщо задана лише одна вершина . (Ви можете зменшити гамільтонів шлях до проблеми: знайти гамільтонів шлях від даного джерела S до заданої раковини T у заданому графі G , надати існуючим ребрам вагу -1, а потім додати штучну вершину V 1 з двома краями вартість N / 2 - 0,01 кожен, один від V 1 до S і один від T до V 1 ).
Якщо ви дозволяєте циклу повторювати вершини, але не ребра, я вважаю, що він все ще є NP-повним (аналогічним скороченням, але розбиває кожну вершину на спрямований край ( v , v ' ) стандартним способом).
Я припускаю, що ваш внесок - це спрямований графік; Я не знаю, як це зробити для непрямої справи.
Зробіть копій вершинного набору вашого графіка, де n - кількість вершин у графі. Замініть кожне ребро від u до v у своєму початковому графіку ребрами, які йдуть від копії i від u до копії i + 1 з v , для всіх варіантів i . Крім того, якщо u належить вказаному набору вершин, але не інакше, також додайте ребро, яке переходить від копії i з u до копії 0 з v .
Цикли в розгорнутому графіку все проектують назад до циклів у вихідному графіку, але кожен цикл у розгорнутому графіку містить одну із зазначених вершин (інакше ви не можете повернутися назад через шари розширення), тому початковий графік містить негативний цикл, що містить вказану вершину, якщо розгорнутий графік містить будь-який негативний цикл.