Поиск циклов Глубина-первый-поиск - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь восстановить графики, удалив одно ребро. Единственная проблема, с которой я сталкиваюсь, это когда в графе есть несколько циклов, например: 0 3, 2 3, 0 2, 1 2, 3 1. Это можно исправить путем извлечения 3 1, но как я могу программа № 3 1 - это край, который должен быть удален?

Есть предложения? :)

Форматированный код из комментария ...

...
else if (backedges.Count > 1) 
{ 
    foreach (Side side in backedges) 
    {
        Node end = Side.node2; 
        Node begin = Side.node1; 
        List<Side> allsidesycle = new List<Side>();
        while (begin != Side.node2) 
        {
            end = begin;
            begin = begin.pi; 
            Side be = new Side(begin, end); 
            allsidescycle.Add(be); 
        }

1 Ответ

0 голосов
/ 01 июля 2018

Чтобы найти циклы, вы можете использовать поиск в ширину (BFS).
Использование BFS на невзвешенных (или одинаково взвешенных) получателях графов, которые затем при первом посещении узла являются кратчайшим путем к этому узлу.
Если вы посещаете его во второй раз - у вас есть цикл. Чтобы удалить его, измените график, удалив второй край.

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