主要内容

有向图

有向边图

描述

有向图对象表示有向图,其中有向边连接节点。在创建有向图对象,您可以通过使用对象函数对对象执行查询来了解有关图的更多信息。例如,您可以添加或删除节点或边,确定两个节点之间的最短路径,或定位特定的节点或边。

G =有向图([1 1],[2 3])e = G =边G = adddeg (G,2,3) G = addnode(G,4) plot(G)

创建

描述

例子

G=有向图创建一个空的有向图对象,G,它没有节点或边。

例子

G=有向图(一个使用方邻接矩阵创建一个加权有向图,一个.中的每个非零项的位置一个为图指定一条边,边的权重等于条目的值。例如,如果(2, 1) = 10,然后G包含从节点2到节点1的边,权值为10。

例子

G=有向图(一个节点名另外指定节点名。元素的数量节点名必须等于大小(1)

G=有向图(一个NodeTable使用表指定节点名称(可能还有其他节点属性),NodeTable.表的行数必须与一个.使用表变量指定节点名的名字

例子

G=有向图(一个___, ' omitselfloops ')的对角元素一个并返回一个没有任何自循环的图。您可以在前面的语法中使用任何输入参数组合。

例子

G=有向图(s t指定有向图边(s, t)成对表示源节点和目标节点。年代t可以指定节点索引或节点名称。有向图对边进行排序G首先是源节点,然后是目标节点。如果你的边的性质和年代t,使用语法EdgeTable G =有向图(s, t)传入边属性,以便它们在结果图中以相同的方式排序。

例子

G=有向图(s t权重还使用数组指定边的权重权重

例子

G=有向图(s t权重节点名另外,使用字符向量或字符串数组的单元格数组指定节点名称,节点名年代t不能包含不在列表中的节点名节点名

G=有向图(s t权重NodeTable使用表指定节点名称(可能还有其他节点属性),NodeTable.属性指定节点名称的名字表变量。年代t不能包含不在列表中的节点名NodeTable

例子

G=有向图(s t权重全国矿工工会使用数字标量指定图中的节点数全国矿工工会

G=有向图(s t___, ' omitselfloops ')不添加任何自循环到图形。也就是说,任何k满足s (k) = = t (k)将被忽略。您可以在前面的语法中使用任何输入参数组合。

G=有向图(s tEdgeTable___使用表指定边缘属性而不是指定权重.的EdgeTable输入必须是一个表,其中每个对应的元素对对应一行年代t.使用表变量指定边的权重重量

例子

G=有向图(EdgeTable使用的表EdgeTable来定义图表。在这个语法中,第一个变量EdgeTable必须指定EndNodes,它必须是一个定义图的边列表的两列数组。

例子

G=有向图(EdgeTableNodeTable另外,使用表指定图形节点的名称(可能还有其他属性),NodeTable

G=有向图(EdgeTable___, ' omitselfloops ')不添加自循环到图形。也就是说,任何k满足EdgeTable.EndNodes (k, 1) = = EdgeTable.EndNodes (k, 2)将被忽略。您必须指定EdgeTable并且可以选择指定NodeTable

输入参数

全部展开

邻接矩阵,指定为一个完整或稀疏的数字矩阵。的条目一个指定图的节点之间的连接网络(边)。中的每个非零项的位置一个指定两个节点之间的边。该条目的值提供了边的权值。一个逻辑邻接矩阵可以得到一个未加权的图。

的主对角线上的非零元素一个指定self-loops,或通过边与自身相连的节点。使用“omitselfloops”忽略对角线项的输入选项。

例子:A = [0 1 0;0 0 0;5 0 0)描述一个有三个节点和两条边的图。从节点1到节点2的边的权值为1,节点3到节点1的边的权值为5

数据类型:||逻辑

节点名,指定为字符向量或字符串数组的单元格数组。节点名长度必须等于numnodes (G)以便为图中的每个节点包含一个非空的、唯一的名称。

例子:G =有向图(A, {n1, n2, n3的})为3 × 3邻接矩阵指定三个节点名,一个

数据类型:细胞|字符串

源节点对和目标节点对,指定为节点索引或节点名。有向图中对应节点之间创建有向边年代t,它必须都是数字,或都是字符向量、字符向量的单元格数组、类别数组或字符串数组。在所有情况下,年代t必须有相同数目的元素。

  • 如果年代t为数字,则它们对应于图节点的索引。数字节点索引必须是大于等于1的正整数。

  • 如果年代t是字符向量、字符向量的单元格数组或字符串数组,然后它们指定节点的名称。的节点属性是一个包含的名字变量带有节点名,G.Nodes.Name

  • 如果年代t是类别数组,那么类别在哪里年代t用作图中的节点名。这可以包括不是元素的类别年代t

  • 如果年代t指定两个节点之间的多条边,则结果为a油印

该表显示了通过数字节点索引或节点名引用一个或多个节点的不同方法。

形式 单独的节点 多个节点
节点索引

标量

例子:1

向量

例子:(1 2 3)

节点名称

特征向量

例子:“一个”

字符向量的单元格数组

例子:{“A”“B”“C”}

字符串标量

例子:“一个”

字符串数组

例子:(“A”“B”“C”)

分类数组

例子:分类(“”)

分类数组

例子:分类([“A”“B”“C”))

例子:有向图([1 2 3],[2 4 5])创建一个有五个节点和三条边的图。

例子:{'波士顿' '纽约' '华盛顿特区},{'纽约' '新泽西' '匹兹堡' '})创建具有5个命名节点和3条边的图。

边权值,指定为标量、向量、矩阵或多维数组。权重必须是标量或具有相同数量元素的数组年代t

有向图将边的权值存储为重量变量G.Edges属性表。要在创建图形之后添加或更改权重,可以直接修改表变量,例如:[25 50 75]'

如果您指定权重作为一个空数组[],则被忽略。

例子:G =有向图([1 2],[2 3],[100 200])创建一个有三个节点和两条边的图。这些边的权值是One hundred.200

数据类型:|

图节点的数目,指定为正标量整数。全国矿工工会必须大于或等于年代t

例子:G =有向图([1,2],[2,3],[],5)创建一个具有三个连接节点和两个隔离节点的图。

边缘信息表。如果没有指定年代t,然后是第一个变量EdgeTable是否需要是一个两列矩阵,字符向量的单元格数组,或字符串数组的名称EndNodes这定义了图形的边。对于边的权值,使用变量重量,因为这个表变量名被一些图形函数使用。如果有一个变量重量,则它必须是一个数值列向量。看到表格有关构造表的更多信息。

创建图形后,使用G.Edges

例子:EdgeTable = table([1 2;2 3;3 5;4 5], VariableNames, {' EndNodes '})

数据类型:表格

节点信息表。NodeTable可以包含任意数量的变量来描述图节点的属性。对于节点名,使用变量的名字,因为这个变量名被一些图形函数使用。如果有一个变量的名字,则它必须是字符向量的单元格数组或在每行中指定唯一名称的字符串数组。看到表格有关构造表的更多信息。

创建完图后,使用G.Nodes

例子:NodeTable =表({' a ';“b”;“c”;' d '}, VariableNames,{'名字'})

数据类型:表格

输出参数

全部展开

有向图,返回为有向图对象。边列表G.Edges.EndNodes首先按源节点排序,然后按目标节点排序。

属性

全部展开

图的边,作为表返回。默认情况下,这是一个——- - - - - -1表,为图中的边数。边列表G.Edges.EndNodes首先按源节点排序,然后按目标节点排序。

  • 要向图中添加新的边缘属性,请在边缘表格

  • 要从图形中添加或删除边,请使用addedgermedge对象的功能。

例子:G.Edges返回一个列出图中边的表格

例子:G.Edges.Weight返回边权值的数值向量。

例子:[10 20 30 55]'为图指定新的边权值。

例子:G.Edges.NormWeight = G.Edges.Weight /笔(G.Edges.Weight)向包含边的标准化权重的表中添加一个新的边属性。

数据类型:表格

图的节点,作为表返回。默认情况下,这是空的N——- - - - - -0表,N为图中的节点数。

  • 要向图中添加新的节点属性,请在节点表格

  • 要从图中添加或删除节点,请使用addnodermnode对象的功能。

例子:G.Nodes返回一个列出图的节点属性的表。默认情况下,该表为空。

例子:G.Nodes.Names ={'蒙大拿','纽约','华盛顿','加州'}'通过添加变量将节点名添加到图中的名字节点表格

例子:G.Nodes.WiFi = logical([1 0 0 1 1])添加变量无线网络节点表格此属性指定某些机场具有无线互联网覆盖。

数据类型:表格

对象的功能

全部展开

addedge 向图中添加新边
rmedge 从图中删除边
flipedge 反向边方向
addnode 向图中添加新节点
rmnode 从图中移除节点
findedge 在图中定位边
findnode 在图中定位节点
numedges 图中的边数
numnodes 图中的节点数
edgecount 两个节点之间的边数
reordernodes 重新排序图节点
子图 提取子图
中心 测量节点的重要性
toposort 有向无环图的拓扑序
transclosure 传递闭包
transreduction 减少传递
isdag 确定图是否是无环的
conncomp 连通图组件
冷凝 图凝结
maxflow 图中最大流量
isisomorphic 确定两个图是否同构
同构 计算两个图之间的同构
ismultigraph 确定图是否有多条边
简化 将多重图简化为简单图
bfsearch 图广度优先搜索
dfsearch 图深度优先搜索
shortestpath 两个单节点之间的最短路径
shortestpathtree 从节点到最短路径树
距离 所有节点对的最短路径距离
allpaths 找出两个图节点之间的所有路径
hascycles 确定图是否包含循环
allcycles 在图中找到所有的循环
邻接 图的邻接矩阵
发病率 图的关联矩阵
入度 节点的入度
出度 学位的节点
前任 节点的前辈
继任者 节点的继任者
最近的 半径内最近邻
inedges 入节点边
outedges 节点出边
情节 绘制图节点和边

例子

全部折叠

创建一个有向图对象有三个节点和三条边。一条边是从节点1到节点2,另一条是从节点1到节点3,第三条是从节点2到节点1。

有向图([1 1 2],[2 3 1])
G =具有属性的有向图:Edges: [3x1 table] Nodes: [3x0 table]

查看图形的边表。对于有向图,第一列表示每条边的源节点,第二列表示目标节点。

G.Edges
ans =3×1表EndNodes ________ 1 2 1 3 2

向图中添加节点名称,然后查看新节点和边表。每个边的源节点和目标节点现在使用它们的节点名表示。

G.Nodes.Name = {“一个”“B”“C”} ';G.Nodes
ans =3×1表名称_____ {'A'} {'B'} {'C'}
G.Edges
ans =3×1表EndNodes  ______________ {' 一个“}{B} {A} {' C '} {B} {A}

中可以添加或修改额外的变量节点边缘表来描述图节点或边的属性。但是,不能通过修改这些表直接更改图中的节点或边的数量。相反,使用addedgermedgeaddnode,或rmnode函数用于修改图中的节点或边的数量。

例如,在节点2和节点3之间的图中添加一条边,然后查看新的边列表。

G = addedge (G, 2、3)
G =具有属性的有向图:Edges: [4x1 table] Nodes: [3x1 table]
G.Edges
ans =4×1表EndNodes  ______________ {' 一个“}{B} {A} {' C '} {B} {A} {B} {' C '}

建立一个对称邻接矩阵,一个,这就创建了一个4阶的完全有向图。使用逻辑邻接矩阵来创建没有权值的图。

A = ones(4) - diag([1 1 1 1])
一个=4×40 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
~ = 0 G =有向图()
G =具有属性的有向图:Edges: [12x1 table] Nodes: [4x0 table]

查看图形的边缘列表。

G.Edges
ans =12×1表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

创建邻接矩阵。

一个=魔法(4);(> 10) = 0
一个=4×40 2 3 0 5 0 10 8 9 7 6 0 4 0 0

使用邻接矩阵创建一个带有指定节点的图。指定“omitselfloops”的对角线上的项一个

名称= {“α”“β”“伽马”“δ”};G =有向图(一个,名字,“omitselfloops”
G =具有属性的有向图:Edges: [8x2 table] Nodes: [4x1 table]

查看边缘和节点信息。

G.Edges
ans =8×2表EndNodes重量  ______________________ ______ {' α’}{“beta”}2{“α”}{“伽马”}3{“beta”}{“α”}5{“beta”}{“伽马”}10{“beta”}{“δ”}8{“伽马”}{“α”}9{“伽马”}{“beta”}7{“δ”}{“α”}4
G.Nodes
ans =4×1表的名字  _________ {' α’}{“beta”}{“伽马”}{“δ”}

使用每个边的结束节点列表创建并绘制一个立方体图。

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 =有向图(s, t)
G =具有属性的有向图:Edges: [12x1 table] Nodes: [8x0 table]
情节(G,“布局”“力”

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

使用每个边的结束节点列表创建并绘制一个立方体图。指定节点名称和边权值作为单独的输入。

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];权重= [10 10 1 10 1 10 1 1 12 12 12 12];名称= {“一个”“B”“C”' D '“E”“F”‘G’“H”};G =有向图(s t重量、名称)
G =具有属性的有向图:Edges: [12x2 table] Nodes: [8x1 table]
情节(G,“布局”“力”“EdgeLabel”G.Edges.Weight)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

使用每个边的结束节点列表创建一个加权图。指定图形应该总共包含10个节点。

S = [1 1 1 1];T = [2 3 4 5 6];权重= [5 5 5 6 9];G =有向图(s t重量、10)
G =具有属性的有向图:Edges: [5x2 table] Nodes: [10x0 table]

画出图。多余的节点与主连接组件断开连接。

情节(G)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

创建一个空的有向图对象,G

G =有向图;

向图中添加三个节点和三条边。中相应的条目年代t定义边的源节点和目标节点。addedge如果适当的节点还没有出现,则自动将它们添加到图中。

S = [1 2 1];T = [2 3 3];G = addedge (G s t)
G =具有属性的有向图:Edges: [3x1 table] Nodes: [3x0 table]

查看边缘列表。每一行描述图中的一条边。

G.Edges
ans =3×1表EndNodes ________ 1 2 1 3 2 3

为了获得最佳性能,可以使用单个调用一次性构造图有向图.对于大型图,在循环中添加节点或边可能会很慢。

创建包含变量的边表EndNodes重量,代码.然后创建一个包含变量的节点表的名字国家.每个表中的变量指定了图节点和边的属性。

S = [1 1 1 2 2 3];T = [2 3 4 3 4 4];权重= [6 6.5 7 11.5 12 17]';代码= {“1/44”“1/49”“1/33”“44/49”“44/33”“49/33”} ';EdgeTable = table([s' t'],weight,code,...“VariableNames”, {“EndNodes”“重量”“代码”})
EdgeTable =6×3表EndNodes重量代码  ________ ______ _________ 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”}
名称= {“美国”“GBR”“德吴”联邦铁路局的} ';country_code = {' 1 '“44”“49”“33”} ';NodeTable =表(名称、country_code“VariableNames”, {“名字”“国家”})
NodeTable =4×2表国家的名字  _______ _______ {' 美国‘}{1}{的GBR}{“44”}{‘德吴}{“49”}{联邦铁路局的}{“33”}

使用节点和边表创建一个图。使用国家代码作为节点和边缘标签绘制图。

G =有向图(EdgeTable NodeTable);情节(G,“NodeLabel”G.Nodes.Country,“EdgeLabel”G.Edges.Code)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

兼容性的考虑

全部展开

R2018a中行为改变

介绍了R2015b