Алгоритмы на графах Определение наличия циклов в графе Югов Иван Олегович МОУ Гимназия 10, г. Тверь.

Презентация:



Advertisements
Похожие презентации
Алгоритмы на графах Топологическая сортировка отсечением вершин Югов Иван Олегович МОУ Гимназия 10, г. Тверь.
Advertisements

Алгоритмы на графах Топологическая сортировка поиском в глубину Югов Иван Олегович МОУ Гимназия 10, г. Тверь.
Урок 9. Массивы Поиск максимума, минимума, поиск индекса максимума, минимума. Перестановки элементов.
Задача Заполнить одномерный целочисленный массив, состоящий из 15 элементов, случайными числами (диапазон задайте сами). Вывести его на экран. Отсортировать.
1 Программирование на языке Паскаль Тема 2. Максимальный элемент массива.
Графы Лекция 2. Графы Неориентированным графом (графом) называется тройка (V, E, ), где V и E конечные множества и {X V : | X | = 2}. Ориентированным.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
M-чередующаяся декомпозиция Лекция 10. Нечетная декомпозиция Теорема 9.7 (Lovász [1972] ) Граф является фактор-критическим тогда и только тогда, когда.
Двумерные массивы Обработка относительно диагоналей.
Задания части А Задания части С. 1. Значения двух массивов A[1..100] и B[1..100] задаются с помощью следующего фрагмента программы. Сколько элементов.
Перед началом изучения новой темы прослушайте моё сообщение.
Пример задачи с решением C4 (высокий уровень, время – 60 мин)
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Урок 10. Сортировки 425 а1а2а3а4 Пример: Дан целочисленный массив А из 4-х элементов. 1 шаг. а1>a2? Да 3 b If a[1]>a[2] then begin b:=a[2]; a[2]:=a[1];
Методика решения и оценивания задач «С1», «С2» Единого Государственного Экзамена.
Алгоритмы сканирования и обхода Лекция 3. Алгоритм сканирования графа Input: Орграф (граф) G и вершина s. Output: Множество R вершин, достижимых из s,
К. Поляков, Программирование на языке Паскаль Часть II Тема: Поиск максимального элемента массива.
Чтобы найти максимальный элемент в массиве и потом производить с ним какие-либо действия, нужно узнать его номер (индекс - I). Для этого вначале будем.
Одномерные массивы. Одномерный массив Статический массив – упорядоченная последовательность фиксированного количества переменных одного типа, имеющая.
Циклические алгоритмы. Задача 1. Вычислить значение функции при x=2, 3, 4, …, 50. Определение. Циклическим называют алгоритм, в котором получение результата.
Транксрипт:

Алгоритмы на графах Определение наличия циклов в графе Югов Иван Олегович МОУ Гимназия 10, г. Тверь

Домашнее задание 1. 1.Какое максимальное количество рёбер может быть в ориентированном ациклическом графе с n вершинами? 2. 2.Может ли быть так, что правильным результатом топологической сортировки графа оказывается любой порядок его вершин? 3. 3.Решить задачу о производстве деталей с помощью DFS Как использовать топологическую сортировку для определения наличия циклов в графе?

Циклы и топологическая сортировка Если в графе есть циклы, то топологическая сортировка невозможна. Если граф ациклический, то можно выполнить топологическую сортировку. Как с помощью топологической сортировки определить наличие циклов в графе? Pascal Cycles := False; for i := 1 to n do for j := 1 to n do if A[i, j] and (order[j] > order[i]) then Cycles := True; C Cycles = FALSE; for(i = 0; i < n; i++) for(j = 0; j < n; j++) if(A[i, j] && (order[j] > order[i])) Cycles = TRUE;

Поиск циклов в графе Используем DFS для нахождения графа. Если из текущей вершины есть путь в серую вершину, то имеем цикл. a b c d Если в графе есть цикл, то почему DFS обязательно его найдёт?

Поиск циклов в графе Рассмотрим цикл и момент, когда покидаем первую вершину в нём. ? ? ? X Y Возвращаться будем из вершины X в вершину Y, поочерёдно окрашивая вершины в цикле в чёрный цвет.

Поиск циклов в графе Как определить сам цикл? Сделаем стек. При заходе в вершину помещаем её в стек, при выходе забираем её оттуда. массив stack длины n стек вершин; sp указатель вершины стека (число элементов в нём). Pascal sp := 0; Push(v): Inc(sp); stack[sp] := v; Pop: Dec(sp); C sp = 0; Push(v): stack[++sp - 1] = v; Pop: sp--;

Поиск циклов в графе Pascal for i := 1 to n do color[i] := WHITE; rm := False; found := False; DFS(1); DFS(v): color[v] := GRAY; Push(v); for do if not Found then if color[u] = WHITE then DFS(u) else if color[u] = GRAY then begin Found := True; cc := u; rm := True; end; if Found then ; color[v] := BLACK; Pop; C for(i = 0; i < n; i++) color[i] = WHITE; rm = Found = FALSE; DFS(0); DFS(v): color[v] = GRAY; Push(v); for( ) if(!Found) if(color[u] == WHITE) DFS(u); else if(color[u] == GRAY) { rm = Found = TRUE; cc = u; }; if(Found) ; color[v] = BLACK; Pop;

Поиск циклов в графе Как запомнить все вершины, из которых выходим? Сделаем второй стек. Если цикл найден, то помещаем во второй стек все покидаемые вершины, пока не встретим вершину cc. массив stack2 длины n стек вершин в прямом порядке; sp2 указатель вершины второго стека. Pascal sp2 := 0; : if rm then begin rm := rm and (v cc); Inc(sp2); stack2[sp2] := v; end; C sp2 = 0; : if(rm) { rm &= v != cc; stack[++sp - 1] = v; };

Поиск циклов в графе В первой строке файла input.txt заданы целые n и m соответственно число вершин и число рёбер ориентированного графа (1 n , 0 m ). В следующих m строках файла заданы пары номеров вершин, соединённых рёбрами. В файл output.txt вывести последовательность номеров вершин, соответствующих любому циклу в графе. Если граф ациклический, то вывести 0. Ограничение по времени 1 сек. Ограничение по памяти 16 Мб.

Домашнее задание 1. 1.Верно ли утверждение, что из всех циклов в графе, проходящих через начальную вершину, DFS прежде всего находит цикл минимальной длины? Привести доказательство или контрпример Решить задачу об определении наличия циклов в ориентированном графе проверкой рёбер: в выходной файл вывести 1, если в графе есть циклы, и 0 в противном случае Выполнить п. 2 для неориентированного графа Решить задачу об отыскании цикла в ориентированном графе с помощью DFS без использования второго стека.