Информатика 7–9 классы

6.2. Графы и табличные модели

Раздел 6. Моделирование и формализация (5 часов)

📋 Содержание темы:
  1. Графы и их элементы
  2. Виды графов
  3. Матрица смежности
  4. Деревья решений
  5. Алгоритмы на графах
  6. Практические задания

Графы и их элементы

Граф — это совокупность вершин (узлов) и соединяющих их рёбер.

Основные понятия:

ПонятиеОписание
Вершина (узел)Элемент графа, обозначающий объект
Ребро (дуга)Связь между двумя вершинами
ПутьПоследовательность рёбер, соединяющая вершины
ЦиклЗамкнутый путь (начало = конец)
Степень вершиныКоличество рёбер, инцидентных вершине

Виды графов

Ориентированный граф (орграф):

Рёбра имеют направление, обозначаемое стрелками. Используется для представления односторонних связей.

Пример: Схема дорог с односторонним движением.

Неориентированный граф:

Рёбра не имеют направления. Связь между вершинами двусторонняя.

Пример: Схема метро, социальные связи.

Взвешенный граф:

Каждому ребру присвоено число — вес (расстояние, стоимость, время).

Пример: Карта дорог с указанием расстояний между городами.

Матрица смежности

Матрица смежности — это таблица, которая описывает связи между вершинами графа.

Если в графе N вершин, матрица имеет размер N×N. Элемент aij = 1, если есть ребро между вершинами i и j, иначе 0.

Пример матрицы смежности для 3 вершин:

ABC
A011
B100
C100

Этот граф имеет рёбра: A-B, A-C.

Деревья решений

Дерево — это связный граф без циклов. В дереве между любыми двумя вершинами существует единственный путь.

Дерево решений — граф, отображающий последовательность вариантов выбора.

Пример: Задача о составлении обедов. Есть 2 супа (борщ, уха) и 3 вторых блюда (котлеты, рыба, курица). Дерево решений показывает 2 × 3 = 6 возможных комбинаций.

Корень дерева — начальная вершина, листья — вершины без потомков.

Свойства деревьев:

Алгоритмы на графах

Обход в ширину (BFS)

Обходит граф «по уровням»: сначала все соседи начальной вершины, затем их соседи и т.д.

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    visited.add(start)
    order = []

    while queue:
        vertex = queue.popleft()
        order.append(vertex)
        for neighbor in graph[vertex]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)
    return order

Применение: поиск кратчайшего пути в невзвешенном графе, проверка связности.

Обход в глубину (DFS)

Идёт «вглубь» по графу, пока не упрётся в тупик, затем возвращается.

def dfs(graph, vertex, visited=None):
    if visited is None:
        visited = set()
    visited.add(vertex)
    order = [vertex]
    for neighbor in graph[vertex]:
        if neighbor not in visited:
            order.extend(dfs(graph, neighbor, visited))
    return order

Применение: поиск циклов, проверка двусвязности, топологическая сортировка.

Алгоритм Дейкстры (кратчайший путь)

Находит кратчайший путь от одной вершины до всех остальных во взвешенном графе с неотрицательными весами.

import heapq

def dijkstra(graph, start):
    distances = {v: float('inf') for v in graph}
    distances[start] = 0
    heap = [(0, start)]

    while heap:
        dist, vertex = heapq.heappop(heap)
        if dist > distances[vertex]:
            continue
        for neighbor, weight in graph[vertex]:
            new_dist = dist + weight
            if new_dist < distances[neighbor]:
                distances[neighbor] = new_dist
                heapq.heappush(heap, (new_dist, neighbor))
    return distances

Применение: навигаторы, маршрутизация сетевого трафика.

Практические задания

Задание 1. Построение графа

По заданной матрице смежности постройте граф и определите степень каждой вершины:

ABCD
A0110
B1001
C1001
D0110

Задание 2. Дерево решений

Составьте дерево решений для задачи: За обед можно выбрать один из 2 супов и одно из 3 горячих блюд. Сколько различных комбинаций обеда возможно?

Задание 3. Кратчайший путь

По таблице расстояний найдите кратчайший путь из Москвы в Казань (с возможной пересадкой в С-Петербурге).

МоскваС-ПетербургКазань
Москва0700820
С-Петербург70001 500
Казань8201 5000

Задание 4. Матрица смежности → список рёбер

Преобразуйте матрицу смежности в список рёбер:

123
1011
2101
3110