У меня есть матрица adjaceny для графа, который отслеживает ребра между узлами при наличии 1 в соответствующем adjMat [I, J] = 1; С помощью этой матрицы adjaceny я хотел бы узнать, все замкнутые пути длины 4, которая существует в графике. Может кто-нибудь, пожалуйста, предоставить мне псевдокод. Спасибо
псевдокод для нахождения замкнутых траекторий в графе
Применение глубины ограниченной глубины первого поиска каждого узел и записи узлов , где ДФС находит начальный узел. Для поиска см псевдокод здесь: http://en.wikipedia.org/wiki/Depth-limited_search . Вам просто нужно добавить что - то вроде
if(node' == node && node'.depth==4) memorize(node)
к началу цикла.
Это звучит как домашнее задание, так что я не буду давать все это прочь. Но вот подсказка: так как вы заинтересованы в поиске циклов длины 4, возьмите 4-й степень матрицы смежности и сканирование по диагонали. Если любой элемент М [я, я] не равен нулю, существует цикл, содержащий вершину я.
Возможно , это не является оптимальным способом вычислить его (это O(n^4)), но очень простой путь сканирования через все вершины
a, b, c, d such that b > a, c > b, d > c
Вы можете проверить, а затем проверить для каждого из следующих циклов:
1. ([а, Ь] && [Ь, с] && [с, d] && [д, а]) 2. ([а, Ь] && [б, г] && [д, с] && [с, а]) 3. ([а, d] && [д, Ь] && [Ь, с] && [с, а]) 1: 2: 3: --- B A --- ВАВ | | \ / | \ / | | | X | X | | | / \ | / \ | D --- --- C D ПЗС
Вы в основном проверять каждый упорядоченное множество вершин (а, б, в, г) для 3-х способов, которыми они могут образовывать цикл.
Таким образом, псевдо-код будет выглядеть так:
for a = 0 to <lastVertex>
for b = a + 1 to <lastVertex>
for c = b + 1 to <lastVertex>
for d = c + 1 to <lastVertex>
if(IsCycle(a,b,c,d)) AddToList([a,b,c,d])
if(IsCycle(a,b,d,c)) AddToList([a,b,d,c])
if(IsCycle(a,c,b,d)) AddToList([a,c,b,d])
next d
next c
next b
next a













