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