Перечисление циклов неориентированного графа с несколькими ребрами - PullRequest
1 голос
/ 02 апреля 2019

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

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

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

graph

Cycles:

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

Количество циклов, которое мне нужно: Cycles = Branches - (Nodes - 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;

Примечания:

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

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

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

1 Ответ

0 голосов
/ 02 апреля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...