Змішаний графік - це графік, який може мати як спрямовані, так і непрямі краї. Її основний непрямий графік отримується шляхом забуття орієнтацій спрямованих ребер, а в іншому напрямку орієнтація змішаного графа отримується шляхом присвоєння напрямку кожному непрямому краю. Набір ребер утворює цикл у змішаному графіку, якщо він може бути орієнтований на формування спрямованого циклу. Змішаний графік є ациклічним тоді і лише тоді, коли він не має циклів.
Це все стандартно, і є багато опублікованих робіт, де згадуються ациклічні змішані графіки. Отже, повинен бути відомий наступний алгоритм тестування на ациклічність змішаних графіків:
Повторіть наступні дії:
- Видаліть будь-яку вершину, яка не має вхідних спрямованих країв і не має прямих напрямків, оскільки вона не може бути частиною жодного циклу.
- Якщо будь-яка вершина не має спрямованих ребер, але вона має рівно один непрямий край, що падає, то будь-який цикл із використанням непрямого краю повинен входити на цей край. Замініть непрямий край на вхідний спрямований край.
Зупиніть, коли більше кроків не можна виконати. Якщо результат - порожній графік, то початковий графік обов'язково повинен бути ациклічним. В іншому випадку, починаючи з будь-якої вершини, що залишилася, можна відслідковувати графік, на кожному кроці слідуючи назад через вхідний край або слідуючи за непрямим краєм, який не є тим, який використовується для досягнення поточної вершини, до появи повтореної вершини. Послідовність ребер, що слідує між першим і другим повторенням цієї вершини (у зворотному порядку) утворює цикл у змішаному графіку.
Стаття Вікіпедії про змішані графіки згадує ациклічні змішані графіки, але не згадує, як їх перевірити, тому я хотів би додати до неї щось про цей алгоритм, але для цього мені потрібна опублікована довідка. Може хтось скаже мені, де це (або будь-який інший алгоритм тестування на ациклічність) з'являється в літературі?