"Информатика", Горячев А.В., Суворова Н.И.
Граф — это модель, которая показывает объекты и связи между ними. Объекты изображают вершинами, а связи — рёбрами. Если на ребре есть стрелка, связь имеет направление: по ней можно двигаться только от начала к концу. Графы помогают описывать дороги, переходы между состояниями и отношения между объектами. Чтобы найти путь в таком графе, нужно пройти по нескольким дугам, не нарушая направления каждой стрелки.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Граф — это множество вершин, некоторые пары которых соединены рёбрами. Вершины и связи между ними вместе образуют модель: она помогает представить объекты и отношения между ними наглядно. Например, можно изобразить города точками, а дороги — линиями между точками. Такая схема удобна, когда нужно разобраться, какие объекты связаны.
Вершина графа — объект, который изображают точкой или подписанным кружком. Вершины могут обозначать города, людей или состояния, то есть то, что мы хотим включить в модель. Подписи помогают различать объекты и указывать, о какой вершине идёт речь. Например, вершины A и B могут обозначать два разных города.
Ребро — связь между двумя вершинами. В обычном графе ребро изображают линией без стрелки, поэтому оно само по себе не указывает, в какую сторону можно двигаться. Так обозначают, например, дорогу, по которой можно ехать в обе стороны. Если направление важно, одной такой линии недостаточно.
Ориентированное ребро, или дуга, — связь со стрелкой, которая указывает направление от одной вершины к другой. В записи A→B стрелка показывает переход из A в B. Такая запись нужна, когда связь действует только в одну сторону, например при одностороннем движении или переходе между состояниями. Дуга не означает, что можно вернуться назад.
Чтобы прочитать граф, сначала выясняют, что обозначают его вершины, а затем рассматривают соединяющие их рёбра. Рёбра показывают именно те связи, которые включены в модель, поэтому отсутствие линии между двумя точками означает, что связь не задана. Выбор того, что считать вершиной и связью, зависит от задачи: для схемы поездок вершинами будут города, а рёбрами — доступные дороги. Одна и та же ситуация может быть представлена разными графами, если в ней важны разные объекты и отношения.
Стрелка меняет смысл связи, потому что ограничивает направление перехода. Если дуга ведёт из A в B, это означает, что по данной связи можно попасть из A в B, но не обязательно обратно. Такое обозначение нужно, например, для односторонних улиц и действий, которые переводят систему из одного состояния в другое. Обратный переход считают возможным лишь тогда, когда в графе есть отдельная дуга B→A.
Дуги, направленные к вершине, называют входящими, а направленные от неё — исходящими. Это различие помогает понять, откуда можно попасть в вершину и куда можно отправиться из неё. У одной вершины могут быть дуги обоих видов: одни стрелки приходят к ней, другие уходят. Например, если есть A→B и B→C, то у B есть входящая дуга из A и исходящая в C.
Чтобы задать ориентированный граф, сначала перечисляют его вершины, затем указывают направленные связи между ними. После этого каждую связь изображают стрелкой от начальной вершины к конечной. Такой порядок помогает не забыть ни один объект и не перепутать направления. Если между двумя вершинами возможны переходы в обе стороны, их обозначают двумя отдельными дугами с противоположными стрелками.
Переход из одной вершины в другую может состоять из нескольких дуг. Чтобы проверить, существует ли такой путь, начинают в первой вершине и на каждом шаге выбирают только дугу, направленную дальше по маршруту. Если последовательность приводит к нужной вершине, путь найден; если все допустимые варианты проверены и не приводят к ней, пути нет. Нельзя перескочить между близко нарисованными вершинами: каждый шаг должен соответствовать существующей дуге.
| Свойство | Обычный граф | Ориентированный граф |
|---|---|---|
| Как изображается связь | Линией без стрелки | Линией со стрелкой |
| Задаётся ли направление | Нет | Да, стрелкой |
| Можно ли пройти связь в обратную сторону | Да, связь не имеет заданного направления | Нет, если обратная дуга не изображена отдельно |
| Как обозначается связь между двумя вершинами | Одним ребром | Одной или двумя дугами, если указаны оба направления |
Сравнивайте графы по строкам: сначала посмотрите, есть ли на связи стрелка, затем проверьте, какие переходы она разрешает. Это помогает выбрать подходящую модель для задачи. Например, дорогу с двусторонним движением можно показать обычным ребром, а улицу с односторонним движением — дугой.
Задача 1. Изобразите граф из трёх городов A, B и C, если между каждой парой городов есть дорога, по которой можно ехать в обе стороны. Нужно решить, какие вершины соединить, и определить, нужны ли стрелки. Поскольку речь идёт о дорогах между каждой парой, проверить следует все возможные пары городов.
Обозначим города A, B и C тремя вершинами. Каждая вершина соответствует одному городу, поэтому дополнительных точек не требуется.
Перечислим пары: A и B, A и C, B и C. Соединим ребром каждую пару, так как дорога есть между всеми городами.
Стрелки не ставим: по условию можно ехать в обе стороны, а обычное ребро не задаёт направление. Проверяем, что получились ровно три связи между тремя парами.
Ответ: три вершины A, B и C соединены рёбрами AB, AC и BC без стрелок.
Задача 2. Даны вершины A, B, C и связи A→B, B→C, A→C. Укажите, из каких вершин можно попасть в C за один переход, а из каких — за два. Сначала проверим, какие дуги заканчиваются в C, а затем — какие маршруты из двух дуг приводят туда.
За один переход можно попасть в C по дуге, которая начинается в другой вершине и сразу заканчивается в C. Такая дуга есть: A→C.
Для двух переходов проверим, есть ли последовательность из двух дуг. Из A можно пройти A→B, затем B→C, поэтому за два перехода в C попадают из A.
Проверим, не следует ли считать путь из A в C единственным способом попасть туда за два перехода. Среди заданных дуг другого маршрута из двух шагов к C нет; из B до C ведёт только одна дуга.
Ответ: за один переход в C можно попасть из A; за два перехода — из A по маршруту A→B→C.
Задача 3. Переходы между состояниями заданы дугами A→B, B→C, C→A, B→D. Можно ли попасть из A в D? Запишите маршрут и объясните, почему обратный маршрут из D в A не задан. Здесь нужно проследить разрешённые переходы, не принимая дугу за двустороннюю связь.
Начинаем в A. Из A задана дуга A→B, поэтому первым переходом можно попасть только в B.
Из B есть две дуги: B→C и B→D. Выбираем B→D и достигаем нужной вершины.
Чтобы проверить обратный маршрут, смотрим на дуги, выходящие из D. Таких дуг в условии нет, значит, начать обратный переход из D по заданным связям нельзя.
Ответ: попасть из A в D можно по маршруту A→B→D. Обратный маршрут из D в A не задан, потому что обратные дуги не появляются автоматически.
Ошибка — считать ориентированное ребро двусторонним. Её допускают, если мысленно воспринимают стрелку как обычную линию и забывают о её направлении. По дуге A→B можно попасть из A в B, но не наоборот. Проверьте себя: для обратного перехода найдите отдельную стрелку B→A.
Ошибка — путать начало и конец дуги. На схеме легко принять вершину у наконечника за начало, особенно если смотреть на линию, не следя за стрелкой. На самом деле дуга начинается у хвоста и заканчивается у наконечника стрелки. Чтобы проверить направление, прочитайте запись как переход: A→B означает из A в B.
Ошибка — считать вершины связанными, если между ними нет ребра. Иногда точки расположены близко, и кажется, что между ними должна быть связь. Но расположение вершин на листе выбирают для удобства, а наличие связи показывает только ребро. Проверьте, нарисована ли между нужной парой вершин линия или стрелка.
Ошибка — путать путь из нескольких дуг с одной дугой. Если из A можно попасть в B, а из B — в C, путь A→B→C существует, но прямой дуги A→C может не быть. Для каждого шага маршрута нужно найти отдельную дугу и проверить её направление. Так вы убедитесь, что переход возможен целиком, а не только на отдельных участках.
Для работы с графами полезно уметь читать схемы и отличать изображённые объекты от связей между ними. Вершины обозначают объекты, а рёбра — отношения, поэтому сначала важно понять, что именно показывает схема. Ориентированные графы применяют для описания маршрутов с односторонним движением, переходов между состояниями и связей в сетях. В этих задачах стрелка помогает определить, какое действие или перемещение разрешено.
Чем ориентированный граф отличается от обычного?
В обычном графе ребро показывает связь без заданного направления, поэтому его можно пройти в обе стороны. В ориентированном графе связь изображают стрелкой, и направление движения по ней ограничено.
Что показывает стрелка на ребре?
Стрелка показывает, от какой вершины к какой направлена связь. Перейти по ней можно только от начала к наконечнику.
Как определить начало и конец дуги?
Начало дуги находится у хвоста стрелки, а конец — у её наконечника. Например, в записи A→B дуга начинается в A и заканчивается в B.
Можно ли пройти по дуге против стрелки?
Нет, одна дуга разрешает переход только по направлению стрелки. Чтобы обозначить обратный переход, нужно нарисовать отдельную дугу в обратную сторону.
Как понять, существует ли путь между двумя вершинами?
Нужно проверить, можно ли начать в первой вершине и последовательно пройти по дугам, каждый раз следуя стрелке. Если таким способом удаётся дойти до второй вершины, путь существует.
§ 15. Граф. Рёбра со стрелками