Пример #1
0
        private void ChainDeeper(Node firstNode, Node secondNode)
        {
            ElementsChain chain = new ElementsChain();

            chain.AddNode(firstNode);                                                                               // Добавляем текущую ноду в цепь
            chain.AddNode(secondNode);                                                                              // Добавляем предыдущую ноду в цепь

            Node currentNode = secondNode;
            Node prevNode    = firstNode;

            while (currentNode.Connections.Count < 3)
            {
                if (currentNode.Connections.Count < 2)                                                              // Тупик
                {
                    return;
                }
                Node nextNode = currentNode.Connections.Keys.FirstOrDefault(i => i != prevNode);
                prevNode    = currentNode;                                                                                          // Переходим на следующую
                currentNode = nextNode;
                chain.AddNode(currentNode);                                                                                         // Записываем ноду в цепь
            }
            if (Chains.FirstOrDefault(i => i.Nodes.First() == chain.Nodes.Last() && i.Nodes.Last() == chain.Nodes.First()) == null) // Проверка на существующий путь
            {
                Chains.Add(chain);                                                                                                  // Добавляем цепь в список цепей
            }
        }