![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Любой граф может быть представлен в матричной форме.
Матрицей смежности графа G=(V,E) называется матрица A порядка n´n, где n=|V|. Элемент матрицы смежности аij=1, если (vi,vj)ÎЕ, vi,vjÎV и aij=0, если (vi,vj)ÏЕ.
Для графа, изображенного на рис. 1.5, матрица смежности представлена в таблице 2.1.
Таблица 2.1. Матрица смежности графа, изображенного на рис.1.5
Отметим, что для неориентированных графов матрица смежности симметрична относительно главной диагонали, то есть в памяти ЭВМ достаточно хранить только половину матрицы.
Матрицей инцидентности графа G=(V,E) называется матрица B порядка n´m, где n=|V|, m=|E|. Элементы матрицы инцидентности bij определяются следующим образом: bij=1, если i-я вершина является началом j-ой дуги, bij=-1, если i-я вершина является концом j-ой дуги, bij=0, если i-я вершина и j-я дуга не инцидентны.
Для неориентированных графов в матрице инцидентности элементам достаточно присваивать только два символа (1 и 0).
Для графа, представленного на рис. 1.4, матрица инцидентности показана в таблице 2.2.
Таблица 2.2. Матрица инцидентности графа, изображенного на рис.1.4
-1 | -1 | |||
-1 | -1 | |||
-1 | ||||
Заметим, что с помощью матрицы инцидентности не могут быть закодированы петли графа. В свою очередь в матрице смежности теряется информация о кратных рёбрах (дугах). Поэтому в некоторых случаях требуется отходить от определений и вводить дополнительные структуры данных для хранения кратных рёбер и петель.
При кодировании взвешенного графа вместо единичных элементов матрицы смежности удобно записать веса соответствующих дуг, а веса несуществующих дуг полагать равными ¥. Такая матрица наывается матрицей весов.
Матрица весов для графа, представленного на рис.1.6, приведена в таблице 2.3.
На практике очень часто матрицы, представляющие графы, бывают сильно разряженными, то есть содержат много символов “0” или “¥”. Это приводит к неоправданным затратам памяти при хранении этих матриц в ЭВМ.
Объем памяти можно существенно уменьшить, если упаковывать матрицы в списки гнездового типа.
Пример упаковки рассмотренной матрицы весов (табл. 2.3) в список гнездового типа, реализованный на трех векторах (массивах), приведен на рис. 2.1.
Таблица 2.3. Матрица весов графа, изображенного на рис.1.6
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | |||
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ||
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ||
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ||
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ||
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ||
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | |
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | |
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | |
¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ | ¥ |
Для нахождения вершин, смежных i–ой вершине, и весов соответствующих дуг по такой структуре необходимо вычислить начальный In и конечный Ik индексы в векторах V и S по формулам
In=Ui
Ik=Ui+1-1.
Тогда SIn,SIn+1,…,SIk - вершины, смежные i-ой вершине, VIn,VIn+1,…,VIk – длины дуг (i,SIn),(i,SIn+1,),…,(i,SIk).
Для хранения упакованной таким образом матрицы весов понадобится 42 ячейки памяти, занимаемых массивами V,S и U. Неупакованная матрица занимала 10´10=100 ячеек памяти.
V | |||||||||||||||||
S | |||||||||||||||||
U | |||||||||||||||||
Рис.2.1. Упаковка матрицы весов (табл. 2.3) в список гнездового типа | |||||||||||||||||
При реализации алгоритмов, в которых изменяется исходный граф (добавляются или удаляются вершины и так далее), для хранения графов иногда удобно применять списки смежности. Список смежности можно реализовать путем создания линейного списка из n линейных списков, где n – число вершин графа.
Для графа, изображенного на рис. 1.6, список смежности представлен на рис. 2.2.
Еще один способ хранения графов - это список рёбер, то есть список, в котором перечислены все рёбра графа.
Список рёбер графа, представленного на рис. 1.6, приведен на рис. 2.3.
Список рёбер реализован на трех массивах и занимает 48 ячеек. Можно также вместо массивов использовать списковые структуры.
Выбор того или иного способа кодирования графа и структуры данных для его реализации зависит как от конкретной задачи, алгоритма её решения, возможных входных данных, так и от индивидуальных наклонностей программиста.
I | |||||||||||||||||
J | |||||||||||||||||
V | |||||||||||||||||
I - начальная вершина, J – конечная вершина, V – вес дуги (I,J) | |||||||||||||||||
Рис.2.3. Список рёбер графа, изображенного на рис.1.6 | |||||||||||||||||
Упражнение. Постройте алгоритмы для преобразования друг в друга всех пар следующих представлений графа:
а) матрица смежности;
б) список рёбер;
в) список смежности;
г) матрица инцинденций.
Дата публикования: 2015-01-04; Прочитано: 1493 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!