Перечисление циклов неориентированного графа с несколькими ребрами

Я пытаюсь написать программу, использующую Electrical Mesh Analasys. Итак, у меня есть узлы схемы [A, B, C, D] и ветви, связывающие узлы [0,1,2,3,4,5,6,7,8].

Как найти кратчайшие циклы в неориентированном графе с несколькими ребрами, как в примере ниже?

Изображение графика (4 узла, 9 ребер / ветвей):

график

Циклы:

0-1-0
5-6-5
6-8-6
1-4-2-1
2-7-3-2
4-7-5-4

Количество циклов, которое мне нужно: Циклы = Ветви - (Узлы - 1), в этом случае мне нужно 6 циклов.

У меня эти данные хранятся в таких массивах:

realNodes = [A,B,C,D];

groupBranches = [[0,1,4,5,6,8], [3,5,6,7,8], [0,1,2,3], [2,4,7]];

// groupArray[0] stores the branch numbers connected to A;
// groupArray[1] stores the branch numbers connected to B;
// groupArray[2] stores the branch numbers connected to C;
// groupArray[3] stores the branch numbers connected to D;

Примечания:

Мне не нужны все возможные циклы, мне просто нужно использовать каждое ребро (ветвь) в каком-то цикле.

Также финальные циклы могут отличаться от представленных в примере.

Буду рад увидеть алгоритм на любом языке.


person 30kpl4y    schedule 02.04.2019    source источник


Ответы (1)


Вы можете создать связующее дерево, используя любой алгоритм, который вам нравится (BFS работает).

Затем для каждого ребра, которого нет в дереве, вы составляете цикл, содержащий это ребро плюс путь через дерево от одного конца до другого.

person Matt Timmermans    schedule 02.04.2019