主要内容

有向图

有向边图

描述

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

G =有向图([1 1],[2 3])e = G。edges G = adddge (G,2,3) G = addnode(G,4) plot(G)

创建

描述

例子

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

例子

G=有向图(一个使用正方形邻接矩阵创建有向图,一个

  • 对于逻辑邻接矩阵,图没有边权值。

  • 对于非逻辑邻接矩阵,图具有边权值。每个非零元素的位置一个指定图形的边,边的权值等于条目的值。例如,如果A(2,1) = 10,然后G包含一条从节点2到节点1的边,权值为10。

例子

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

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

例子

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

例子

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

例子

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 10 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"])

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

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

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

有向图将边权值存储为a重量中的变量G.Edges属性表。在创建图形后,要添加或更改权重,可以直接修改表变量,例如:G.Edges.Weight = [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 = table({'a';“b”;“c”;' d '}, VariableNames,{'名字'})

数据类型:表格

属性

全部展开

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

  • 控件中创建一个新变量,即可向图形中添加新的边缘属性边缘表格

  • 控件可在图形中添加或删除边addedgermedge对象的功能。

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

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

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

例子:G.Edges.NormWeight = G.Edges.Weight/sum(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。

G =有向图([1 1 2],[2 3 1])
G =有向图属性:边:[3x1表]节点:[3x0表]

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

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 = add (G,2,3)
G =有向图属性:边:[4x1表]节点:[3x1表]
G.Edges
ans =4×1表EndNodes  ______________ {' 一个“}{B} {A} {' C '} {B} {A} {B} {' C '}

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

A = ones(4) - diag([1 1 1 1 1])
一个=4×40 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 10 0
有向图(A~=0)
G =有向图属性:边:[12x1表]节点:[4x0表]

查看图的边列表。

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

创建一个邻接矩阵。

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

使用邻接矩阵创建具有命名节点的图。指定“omitselfloops”忽略对角线上的元素一个

名称= {“α”“β”“伽马”“δ”};G =有向图(A,名称,“omitselfloops”
G =有向图属性:边:[8x2表]节点:[4x1表]

查看边缘和节点信息。

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 =有向图属性:边:[12x1表]节点:[8x0表]
情节(G,“布局”“力”

图中包含一个轴对象。axis对象包含一个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 12];名称= {“一个”“B”“C”' D '“E”“F”‘G’“H”};G =有向图(s,t,权重,名称)
G =有向图属性:边:[12x2表]节点:[8x1表]
情节(G,“布局”“力”“EdgeLabel”G.Edges.Weight)

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

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

S = [1 1 1 1 1 1];T = [2 3 4 5 6];权重= [5 5 5 6 9];G =有向图(s,t,权重,10)
G =有向图属性:边:[5x2表]节点:[10x0表]

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

情节(G)

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

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

G =有向图;

向图中添加三个节点和三条边。中相应的条目年代而且t定义边的源节点和目标节点。addedge自动将适当的节点添加到图中(如果这些节点还不存在)。

S = [1 2 1];T = [2 3 3];G = add (G,s,t)
G =有向图属性:边:[3x1表]节点:[3x0表]

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

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

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

创建一个包含变量的边表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'],权重,代码,...“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 = table(names,country_code,“VariableNames”, {“名字”“国家”})
NodeTable =4×2表国家的名字  _______ _______ {' 美国‘}{1}{的GBR}{“44”}{‘德吴}{“49”}{联邦铁路局的}{“33”}

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

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

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

兼容性的考虑

全部展开

R2018a的行为发生了变化

扩展功能

在R2015b中引入