диграф

График с ориентированными ребрами

Описание

Объекты digraph представляют ориентированных графов, которые имеют направленные края, соединяющие узлы. После того, как вы создадите объект digraph, можно узнать больше о графике при помощи объектных функций, чтобы выполнить запросы против объекта. Например, можно добавить или удалить узлы или края, определить кратчайший путь между двумя узлами или определить местоположение определенного узла или края.

G = digraph([1 1], [2 3])
e = G.Edges
G = addedge(G,2,3)
G = addnode(G,4)
plot(G)

Создание

Синтаксис

G = digraph
G = digraph(A)
G = digraph(A,nodenames)
G = digraph(A,NodeTable)
G = digraph(A,___,'omitselfloops')
G = digraph(s,t)
G = digraph(s,t,weights)
G = digraph(s,t,weights,nodenames)
G = digraph(s,t,weights,NodeTable)
G = digraph(s,t,weights,num)
G = digraph(s,t,___,'omitselfloops')
G = digraph(s,t,EdgeTable,___)
G = digraph(EdgeTable)
G = digraph(EdgeTable,NodeTable)
G = digraph(EdgeTable,___,'omitselfloops')

Описание

пример

G = digraph создает пустой объект ориентированного графа, G, который не имеет никаких узлов или краев.

пример

G = digraph(A) создает взвешенного ориентированного графа с помощью квадратной матрицы смежности, A. Местоположение каждой ненулевой записи в A задает край для графика, и вес края равен значению записи. Например, если A(2,1) = 10, то G содержит край от узла 2 к узлу 1 с весом 10.

пример

G = digraph(A,nodenames) дополнительно задает имена узла. Число элементов в nodenames должно быть равно size(A,1).

G = digraph(A,NodeTable) задает имена узла (и возможно другие атрибуты узла) использование таблицы, NodeTable. Таблица должна иметь то же количество строк как A. Задайте имена узла с помощью табличной переменной Name.

пример

G = digraph(A,___,'omitselfloops') игнорирует диагональные элементы A и возвращает график без любых самоциклов. Можно использовать любую из комбинаций входных аргументов в предыдущих синтаксисах.

пример

G = digraph(s,t) задает края ориентированного графа (s,t) в парах, чтобы представлять входные и выходные узлы. s и t могут задать индексы узла или имена узла.

пример

G = digraph(s,t,weights) также задает вес ребра с массивом weights.

пример

G = digraph(s,t,weights,nodenames) дополнительно задает имена узла с помощью массива ячеек из символьных векторов или массива строк, nodenames. s и t не могут содержать имена узла, которые не находятся в nodenames.

G = digraph(s,t,weights,NodeTable) задает имена узла (и возможно другие атрибуты узла) использование таблицы, NodeTable. Задайте имена узла с помощью табличной переменной Name. s и t не могут содержать имена узла, которые не находятся в NodeTable.

пример

G = digraph(s,t,weights,num) задает количество узлов в графике с числовым скаляром num.

G = digraph(s,t,___,'omitselfloops') не добавляет самоциклов к графику. Таким образом, любой k, который удовлетворяет s(k) == t(k), проигнорирован. Можно использовать любую из комбинаций входных аргументов в предыдущих синтаксисах.

G = digraph(s,t,EdgeTable,___) использует таблицу, чтобы задать граничные атрибуты вместо того, чтобы задать weights. Входной параметр EdgeTable должен быть таблицей со строкой для каждой соответствующей пары элементов в s и t. Задайте вес ребра с помощью табличной переменной Weight.

пример

G = digraph(EdgeTable) использует таблицу EdgeTable, чтобы задать график. С этим синтаксисом первую переменную в EdgeTable нужно назвать EndNodes, и это должен быть массив двух-столбца, задающий список краев графика.

пример

G = digraph(EdgeTable,NodeTable) дополнительно задает имена (и возможно другие атрибуты) вершин графика с помощью таблицы, NodeTable.

G = digraph(EdgeTable,___,'omitselfloops') не добавляет самоциклы к графику. Таким образом, любой k, который удовлетворяет EdgeTable.EndNodes(k,1) == EdgeTable.EndNodes(k,2), проигнорирован. Вы должны задать EdgeTable и опционально можете задать NodeTable.

Входные параметры

развернуть все

Матрица смежности, заданная как полная или разреженная, числовая матрица. Записи в A задают сеть связей (края) между вершинами графика. Местоположение каждой ненулевой записи в A задает край между двумя узлами. Значение той записи обеспечивает вес ребра. Логическая матрица смежности приводит к невзвешенному графику.

Ненулевые записи на основной диагонали A задают самоциклы или узлы, которые соединяются с собой с краем. Используйте входную опцию 'omitselfloops', чтобы проигнорировать диагональные элементы.

Пример: = [0 1 0; 0 0 0; 5 0 0] описывает график с тремя узлами и двумя краями. Край от узла 1 к узлу 2 имеет вес 1, и край от узла 3 к узлу 1 имеет вес 5.

Типы данных: единственный | удваиваются | логический

Имена узла, заданные как массив ячеек из символьных векторов или массив строк. nodenames должен иметь длину, равную numnodes(G) так, чтобы это содержало непустое, уникальное имя для каждого узла в графике.

Пример: G = диграф (A, {'n1', 'n2', 'n3'}) задает три имени узла для 3 3 матрица смежности, A.

Типы данных: ячейка | строка

Входные и выходные пары узла, заданные как индексы узла или имена узла. digraph создает ориентированные ребра между соответствующими узлами в s и t, который должен оба быть числовым, или оба быть векторами символов, массивами ячеек из символьных векторов или массивами строк. Во всех случаях s и t должны иметь то же число элементов.

  • Если s и t являются числовыми, то они соответствуют индексам вершин графика. Числовые индексы узла должны быть положительными целыми числами, больше, чем или равный 1.

  • Если s и t являются векторами символов, массивами ячеек из символьных векторов или массивами строк, то они задают имена для узлов. Свойство Nodes графика является таблицей, содержащей переменную Name с именами узла, G.Nodes.Name Имя.

  • Если s и t задают несколько краев между теми же двумя узлами, то результатом является мультиграф.

Эта таблица показывает различные способы относиться к одному или нескольким узлам или их числовыми индексами узла или их именами узла.

ФормаЕдинственный узелНесколько узлов
Индекс узла

Скаляр

Пример 1

Вектор

Пример: [1 2 3]

Имя узла

Символьный вектор

Пример: A

Массив ячеек из символьных векторов

Пример: A, B, C

Скаляр строки

Пример: A

StringArray

Пример: A, B, C

Пример: G = диграф ([1 2 3], [2 4 5]) создает график с пятью узлами и тремя краями.

Пример: G = диграф ({'Бостон' 'нью-йоркский' 'Вашингтон D.C.'}, {'нью-йоркский' 'Нью-Джерси' 'Питтсбург'}) создает график с пятью именованными узлами и тремя краями.

Вес ребра, заданный как скаляр, вектор, матрица или многомерный массив. weights должен быть скаляром или массивом с тем же числом элементов как s и t.

digraph хранит вес ребра как переменную Weight в таблице свойства G.Edges. Чтобы добавить или изменить веса после создания графика, можно изменить табличную переменную непосредственно, например, G.Edges.Weight = [25 50 75]'.

Если вы задаете weights как пустой массив [], то это проигнорировано.

Пример: G = диграф ([1 2], [2 3], [100 200]) создает график с тремя узлами и двумя краями. Края имеют веса 100 и 200.

Типы данных: single | double

Количество вершин графика, заданных как положительное скалярное целое число. num должен быть больше, чем или равным самым большим элементам в s и t.

Пример: G = диграф ([1 2], [2 3], [], 5) создает график с тремя связанными узлами и двумя изолированными узлами.

Таблица информации о крае. Если вы не задаете s и t, то первая переменная в EdgeTable требуется, чтобы быть матрицей двух-столбца, массивом ячеек из символьных векторов или массивом строк под названием EndNodes, который задает края графика. Для веса ребра используйте переменный Weight, поскольку это имя табличной переменной используется некоторыми функциями графика. Если существует переменный Weight, то это должен быть числовой вектор - столбец. Смотрите table для получения дополнительной информации о построении таблицы.

После создания графика запросите таблицу информации о крае с помощью G.Edges Края.

Пример: EdgeTable = таблица ([1 2; 2 3; 3 5; 4 5], 'VariableNames', {'EndNodes'})

Типы данных: таблица

Таблица информации об узле. NodeTable может содержать любое количество переменных, чтобы описать атрибуты вершин графика. Для имен узла используйте переменный Name, поскольку это имя переменной используется некоторыми функциями графика. Если существует переменный Name, то это должен быть массив ячеек из символьных векторов или массив строк, задающий уникальное имя в каждой строке. Смотрите table для получения дополнительной информации о построении таблицы.

После того, как график создается, запросите таблицу информации об узле с помощью G.Nodes.

Пример: NodeTable = таблица ({'a'; B; C; 'd'} ', VariableNames', {'Имя'})

Типы данных: таблица

Выходные аргументы

развернуть все

Ориентированный граф, возвращенный как объект digraph. Для получения дополнительной информации смотрите digraph.

Свойства

развернуть все

Края графика, возвращенного как таблица. По умолчанию это - M-by-1 таблица, где M является количеством краев в графике.

  • Чтобы добавить новые граничные свойства к графику, создайте новую переменную в таблице Edges.

  • Чтобы добавить или удалить края из графика, используйте функции объекта addedge или rmedge.

Пример: G. Края возвращают таблицу, перечисляющую края в графике

Пример: G. Края. Вес возвращает числовой вектор веса ребра.

Пример: G. Края. Вес = [10 20 30 55]' задает новый вес ребра для графика.

Пример: G. Края. NormWeight = G.Edges.Weight/sum(G.Edges.Weight) добавляет новое граничное свойство к таблице, содержащей нормализованные веса краев.

Типы данных: таблица

Вершины графика, возвращенного как таблица. По умолчанию это - пустой N-by-0 таблица, где N является количеством узлов в графике.

  • Чтобы добавить новые свойства узла к графику, создайте новую переменную в таблице Nodes.

  • Чтобы добавить или удалить узлы из графика, используйте функции объекта addnode или rmnode.

Пример: G. Узлы возвращают таблицу, перечисляющую свойства узла графика. Эта таблица пуста по умолчанию.

Пример: G. Узлы. Имена = {'Монтана', 'Нью-Йорк', 'Вашингтон', 'Калифорния'}, ' добавляет имена узла к графику путем добавления имен переменных к таблице Nodes.

Пример: G. Узлы. WiFi = логический ([1 0 0 1 1]') добавляет переменный WiFi к таблице Nodes. Это свойство указывает, что определенные аэропорты имеют покрытие беспроводного Интернета.

Типы данных: таблица

Функции объекта

развернуть все

addedgeДобавьте новый край к графику
rmedgeУдалите край из графика
flipedgeПротивоположные граничные направления
addnodeДобавьте новый узел к графику
rmnodeУдаление узла из графика
findedgeНайдите край в графике
findnodeНайдите узел в графике
numedgesКоличество краев в графике
numNodes Количество узлов в графике
edgecountКоличество краев между двумя узлами
reordernodesПереупорядочение вершин графика
подграфИзвлечение подграфа
bfsearchПоиск графика в ширину
dfsearchПоиск графика в глубину
центрированностьИзмерьте важность узла
toposortТопологический порядок направленного графа без петель
трансзакрытиеПереходное закрытие
транссокращениеПереходное сокращение
isdagОпределите, является ли график нециклическим
conncompКомпоненты связного графа
конденсацияКонденсация графика
maxflowМаксимальный поток в графике
isisomorphicОпределите, изоморфны ли два графика
изоморфизмВычислите изоморфизм между двумя графиками
ismultigraphОпределите, имеет ли график несколько краев
упрощениеУменьшите мультиграф до простого графика
кратчайший путьКратчайший путь между двумя единственными узлами
shortestpathtreeДерево кратчайшего пути от узла
расстоянияРасстояния кратчайшего пути всех пар узла
смежностьМатрица смежности графика
падениеМатрица падения графика
indegreeВ градусе узлов
outdegree-Градус узлов
предшественникиПредшественники узла
преемникиПреемники узла
самый близкийСамые близкие соседи в радиусе
inedgesВходящие края к узлу
outedgesИсходящие края от узла
графикПостройте график вершин графика и краев

Примеры

свернуть все

Создайте объект digraph с тремя узлами и тремя краями. Один край от узла 1 к узлу 2, другой от узла 1 к узлу 3, и третье от узла 2 к узлу 1.

G = digraph([1 1 2],[2 3 1])
G = 
  digraph with properties:

    Edges: [3x1 table]
    Nodes: [3x0 table]

Просмотрите граничную таблицу графика. Для ориентированных графов первый столбец указывает на исходные узлы каждого края, и второй столбец указывает на целевые узлы.

G.Edges
ans=3×1 table
    EndNodes
    ________

     1    2 
     1    3 
     2    1 

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

G.Nodes.Name = {'A' 'B' 'C'}';
G.Nodes
ans=3×1 table
    Name
    ____

    'A' 
    'B' 
    'C' 

G.Edges
ans=3×1 table
     EndNodes 
    __________

    'A'    'B'
    'A'    'C'
    'B'    'A'

Можно добавить или изменить дополнительные переменные в таблицах Nodes и Edges, чтобы описать атрибуты вершин графика или краев. Однако вы не можете непосредственно изменить количество узлов или краев в графике путем изменения этих таблиц. Вместо этого используйте addedge, rmedge, addnode или функции rmnode, чтобы изменить количество узлов или краев в графике.

Например, добавьте край к графику между узлами 2 и 3 и просмотрите новый список краев.

G = addedge(G,2,3)
G = 
  digraph with properties:

    Edges: [4x1 table]
    Nodes: [3x1 table]

G.Edges
ans=4×1 table
     EndNodes 
    __________

    'A'    'B'
    'A'    'C'
    'B'    'A'
    'B'    'C'

Создайте симметричную матрицу смежности, A, который создает полного ориентированного графа порядка 4. Используйте логическую матрицу смежности, чтобы создать график без весов.

A = ones(4) - diag([1 1 1 1])
A = 4×4

     0     1     1     1
     1     0     1     1
     1     1     0     1
     1     1     1     0

G = digraph(A~=0)
G = 
  digraph with properties:

    Edges: [12x1 table]
    Nodes: [4x0 table]

Просмотрите список краев графика.

G.Edges
ans=12×1 table
    EndNodes
    ________

     1    2 
     1    3 
     1    4 
     2    1 
     2    3 
     2    4 
     3    1 
     3    2 
     3    4 
     4    1 
     4    2 
     4    3 

Создайте матрицу смежности.

A = magic(4);
A(A>10) = 0
A = 4×4

     0     2     3     0
     5     0    10     8
     9     7     6     0
     4     0     0     1

Создайте график с именованными узлами с помощью матрицы смежности. Задайте 'omitselfloops', чтобы проигнорировать записи на диагонали A.

names = {'alpha' 'beta' 'gamma' 'delta'};
G = digraph(A,names,'omitselfloops')
G = 
  digraph with properties:

    Edges: [8x2 table]
    Nodes: [4x1 table]

Просмотрите информация об узле и край.

G.Edges
ans=8×2 table
         EndNodes         Weight
    __________________    ______

    'alpha'    'beta'        2  
    'alpha'    'gamma'       3  
    'beta'     'alpha'       5  
    'beta'     'gamma'      10  
    'beta'     'delta'       8  
    'gamma'    'alpha'       9  
    'gamma'    'beta'        7  
    'delta'    'alpha'       4  

G.Nodes
ans=4×1 table
     Name  
    _______

    'alpha'
    'beta' 
    'gamma'
    'delta'

Создайте и постройте график графика куба с помощью списка конечных узлов каждого края.

s = [1 1 1 2 2 3 3 4 5 5 6 7];
t = [2 4 8 3 7 4 6 5 6 8 7 8];
G = digraph(s,t)
G = 
  digraph with properties:

    Edges: [12x1 table]
    Nodes: [8x0 table]

plot(G,'Layout','force')

Создайте и постройте график графика куба с помощью списка конечных узлов каждого края. Задайте имена узла и вес ребра как отдельные входные параметры.

s = [1 1 1 2 2 3 3 4 5 5 6 7];
t = [2 4 8 3 7 4 6 5 6 8 7 8];
weights = [10 10 1 10 1 10 1 1 12 12 12 12];
names = {'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H'};
G = digraph(s,t,weights,names)
G = 
  digraph with properties:

    Edges: [12x2 table]
    Nodes: [8x1 table]

plot(G,'Layout','force','EdgeLabel',G.Edges.Weight)

Создайте взвешенный график с помощью списка конечных узлов каждого края. Укажите, что график должен содержать в общей сложности 10 узлов.

s = [1 1 1 1 1];
t = [2 3 4 5 6];
weights = [5 5 5 6 9];
G = digraph(s,t,weights,10)
G = 
  digraph with properties:

    Edges: [5x2 table]
    Nodes: [10x0 table]

Постройте график графика. Дополнительные узлы отключаются от первичного связанного компонента.

plot(G)

Создайте пустой объект диграфа, G.

G = digraph;

Добавьте три узла и три края к графику. Соответствующие записи в s и t задают входные и выходные узлы краев. addedge автоматически добавляет соответствующие узлы к графику, если они уже не присутствуют.

s = [1 2 1];
t = [2 3 3];
G = addedge(G,s,t)
G = 
  digraph with properties:

    Edges: [3x1 table]
    Nodes: [3x0 table]

Просмотрите список краев. Каждая строка описывает край в графике.

G.Edges
ans=3×1 table
    EndNodes
    ________

     1    2 
     1    3 
     2    3 

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

Составьте граничную таблицу, которая содержит переменные EndNodes, Weight и Code. Затем составьте таблицу узла, которая содержит переменные Name и Country. Переменные в каждой таблице задают свойства вершин графика и краев.

s = [1 1 1 2 2 3];
t = [2 3 4 3 4 4];
weights = [6 6.5 7 11.5 12 17]';
code = {'1/44' '1/49' '1/33' '44/49' '44/33' '49/33'}';
EdgeTable = table([s' t'],weights,code, ...
    'VariableNames',{'EndNodes' 'Weight' 'Code'})
EdgeTable=6×3 table
    EndNodes    Weight     Code  
    ________    ______    _______

     1    2         6     '1/44' 
     1    3       6.5     '1/49' 
     1    4         7     '1/33' 
     2    3      11.5     '44/49'
     2    4        12     '44/33'
     3    4        17     '49/33'

names = {'USA' 'GBR' 'DEU' 'FRA'}';
country_code = {'1' '44' '49' '33'}';
NodeTable = table(names,country_code,'VariableNames',{'Name' 'Country'})
NodeTable=4×2 table
    Name     Country
    _____    _______

    'USA'     '1'   
    'GBR'     '44'  
    'DEU'     '49'  
    'FRA'     '33'  

Создайте график с помощью граничных таблиц и узла. Постройте график графика с помощью кодов страны в качестве граничных меток и узла.

G = digraph(EdgeTable,NodeTable);
plot(G,'NodeLabel',G.Nodes.Country,'EdgeLabel',G.Edges.Code)

Введенный в R2015b

Была ли эта тема полезной?