Напомним, что циклом в графе $G$ называется ненулевой путь, ведущий из вершины $v$ в саму себя. Граф называют ацикличным, если в нем нет циклов.
Для нахождения цикла, рассмотрим такой альтернативные способ делать обход в глубину:
Здесь мы вместо массива used передаем в рекурсию параметр $p$, равный номеру вершины, откуда мы пришли, или $-1$, если мы начали обход в этой вершине.
Этот способ корректен только для деревьев — проверка u != p гарантирует, что мы не пойдем обратно по ребру, однако если в графе есть цикл, то мы в какой то момент вызовем dfs второй раз с одними и теми же параметрами и попадем в бесконечный цикл.
Если мы можем определять, попали ли мы в бесконечный цикл, то это ровно то, что нам нужно. Модифицируем dfs так, чтобы мы могли определять момент, когда мы входим в цикл. Для этого просто вернем массив used обратно, но будем использовать его для проверки, были ли мы когда-то в вершине, которую мы собираемся посетить — это будет означать, что цикл существует.
Циклы Кондратьева — просто о сложном
Если нужно восстанавливать сам цикл, то можно вместо завершения программы возвращаться из рекурсии несколько раз и выписывать вершины, пока не дойдем до той, в которой нашелся цикл.
Как и со всеми обходами, если в графе больше одной компоненты связности, или если граф ориентированный, то dfs нужно запускать несколько раз от вершин разных компонент.
Источник: ru.algorithmica.org
Циклы в 1С на примерах
Цикл – это конструкция, которая предназначена для многократного исполнения неких инструкций. Во встроенном языке 1С существует три вида циклов «Пока», «Для» и «Для Каждого». Рассмотрим на примерах работу с каждым из них.
Цикл «Пока»
Синтаксис:
Принцип работы такого цикла заключается в том, что операторы находящиеся после ключевого слова «Цикл», будут выполнятся пока логическое выражение будет равно ИСТИНА.
Пример:
В результате выполнения такого цикла, в окно сообщений будут последовательно выведены цифры от 1 до 5.
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!
Цикл «Для»
Синтаксис:
После начального присвоения значения для переменной после ключевого слова «Для», такой цикл прекратится, когда значение переменной будет меньше либо равно конечному значению после ключевого слова «По». В таком цикле приращение переменной происходит автоматически, и всегда равно «1».
Пример:
Результат:
Получите понятные самоучители по 1С бесплатно:
Цикл «Для Каждого»
Синтаксис:
Такой вид циклов служит для обхода неких коллекций значений в 1с (массивов, таблиц значений, структур и т.д.). Цикл будет закончен, когда будут перебраны все элементы коллекции. Использование такого цикла рассмотрим на примере последовательного перебора всех элементов одномерного массива, с последующим выводом значений элементов в окно сообщений.
Выполнение работ нулевого цикла на строительной площадке | Строительство ПКТБ | Проект «Совэлмаш»
Пример кода:
Визуальное представление созданного массива в 1С:
Результат работы цикла:
Вложенные циклы
Во встроенном языке программирования 1С доступна возможность использования вложенных циклов. К классическому примеру использования таких конструкций можно отнести один из способов последовательного перебора всех ячеек таблицы значений.
Пример:
С помощью внешнего цикла мы последовательно получаем строки из коллекции «ТаблицаЗначений». Затем во внутреннем цикле, имея строку, получаем значение каждой ячейки из коллекции «КоллекцияКолонок».
Как организовать обратный цикл
Пример:
Результат:
Как принудительно продолжить цикл
Принудительный переход к следующей итерации в циклах 1С осуществляется с помощью оператора «Продолжить» (Continue).
Пример:
В таком примере с помощью операторов «Если» и «Продолжить» пропускаем цифру «2».
Результат:
Как прервать цикл
Полный выход из цикла (прерывание) во встроенном языке программирования 1С осуществляется с помощью оператора «Прервать» (Break).
Пример:
Такой цикл перестанет выполняться, как только значение переменной «Счётчик» будет равно «2».
Источник: 1s83.info