![]() |
![]() |
||||
![]() | |||||
![]() |
![]() АЛГОРИТМЫ Новости Рассылка новостей Форум AlgoPascal Редактор блок-схем Статьи О сайте Контакты |
![]() |
![]() Операции с графамиПрочесть введение в раздел (обычно там есть полезная информация)Нахождение K путей минимальной длины Построение минимального остовного дерева Кратчайший путь в графе с неотрицательными весами Кратчайший путь для всех пар вершин Путь с минимальным количеством вершин ВведениеЗдесь рассматриваются алгоритмы работы с графами. Граф - пара G = (V, E), где V - множество вершин (вершинами могут быть объекты произвольной природы) и E - множество ребер, ребра - элементы вида e = (vi , vj ), где vi , vj принадлежат множеству вершин, т.е. ребро это элемент из декартова произведения множества V на себя. Достаточно подробно терминология теории графов разобрана на странице А.Чернобаева, поэтому за более полной информацией можно обратиться туда, там же можно найти алгоритмы для работы с графами, как те которые представлены здесь, так и многие другие. Нам же для дальнейшей работы понадобится рассмотреть способы задания и структуры для хранения информации о графе. Первый способ задания графа (невзвешенного) это задать матрицу связности S размера n*n, где n количество вершин графа, т.е. мощность множества V, при этом элемент sij = 1, если существует ребро из i-ой в j-ую вершины и sij = 0, если такого ребра нет. Нетрудно видеть, что матрица S - симметрична, если граф неориентированный, и может быть не симметричный в противном случае. При этом полагаем, что sii = 0, т.е. в графе нет петель. Такой способ задания графа используется например в волновом алгоритме. Второй способ используется для задания взвешенного графа, т.е. графа каждому ребру которого соответствует некий параметр - вес. Для определения такого графа используется матрица весов W размер которой n*n, где n количество вершин графа. При этом элемент wij равен весу ребра соединяющего i-ую и j-ую вершины. Если такого ребра нет, то wij полагаем равным бесконечности (на практике это максимальное число возможное на данном языке программирования). Этот способ задания используется например в алгоритмах поиска пути во взвешенном графе. |
![]() |
|
|
![]() |