5.1 无向图与有向图

5.1 无向图及有向图

5.1.1 无向图

多重集合:元素可以重复出现的集合

定义 无向图G=<V,E>, 其中
(1) 顶点集V是非空有穷集合, 其元素称为顶点
(2) 边集E为V&V的多重子集,其元素称为无向边,简称
在这里插入图片描述

5.1.2 有向图

定义 有向图G=<V,E>D=<V,E>, 其中
(1)顶点集V是非空有穷集合, 其元素称为顶点
(2) 边集E为 V× V的多重子集,其元素称为有向边,简称

D的基图:用无向边代替有向边
在这里插入图片描述

5.1.3 无向图与有向图

  • 通常用G表示无向图, D表示有向图, 也常用G泛指无向图和有向图。
    V(G), E(G), V(D), E(D): G和D的顶点集, 边集

    n阶图: n个顶点的图

    零图: E= ∅

    平凡图: 1 阶零图

    空图: V= ∅

5.1.4 顶点和边的关联与相邻

定义 设e=(u,v)是无向图G=<V,E>的一条边, 称u,v为e的端点,e与u(v)关联

​ 若u≠v, 则称e与u(v)的关联次数为1;

​ 若u=v, 则称e为, 此时称e与u 的关联次数为2;

​ 若w不是e端点, 则称e与w 的关联次数为0

​ 无边关联的顶点称作孤立点

定义 设无向图G=<V,E>, u,v∈V, e,e’∈E, 若(u,v)∈E, 则称u,v相邻;

​ 若e,e’至少有一个公共端点, 则称e,e’相邻

​ 对有向图有类似定义。设e=<u,v>是有向图的一条边,又称u是e的始点,v是e的终点, u邻接到v, v邻接于u。

5.1.5 顶点的度数

​ 设G=<V,E>为无向图, v ∈ V,

v的度数(度) d(v): v作为边的端点次数之和
悬挂顶点: 度数为1的顶点
悬挂边: 与悬挂顶点关联的边
G的最大度 △ (G)=max{d(v)|v∈V}
G的最小度 δ (G)=min{d(v)| v∈V}

在这里插入图片描述

右图中d(v5)=3, d(v2)=4, d(v1)=4,△(G)=4, δ(G)=1,v4是悬挂顶点, e7是悬挂边, e1是环

设D=<V,E>为有向图, v∈V,
v的出度d+(v) : v作为边的始点次数之和
v的入度d-(v): v作为边的终点次数之和
v的度数(度)d(v) : v作为边的端点次数之和
d(v)= d+(v)+ d-(v)

D的最大出度△+(D) =max{d+(v)|v∈V}
最小出度δ+(D) =min{d+(v)|v∈V}

最大入度△-(D) =max{d-(v)|v∈V}

最小入度δ-(D) =min{d-(v)|v∈V}

最大度 △ (D)=max{d(v)|v∈V}

最小度 δ (D)=min{d(v)|v∈V}

实例: 在这里插入图片描述

5.1.6 握手定理

  • 定理

    任意无向图和有向图的所有顶点度数之和都等于边数的2倍, 并且有向图的所有顶点入度之和等于出度之和等于边数。

  • 证明

    G中每条边(包括环)均有两个端点,所以在计算G中各顶点度数之和时,每条边均提供2度,m条边共提供2m度。

    有向图的每条边提供一个入度和一个出度, 故所有顶点入度之和等于出度之和等于边数。

  • 推论

​ 任意无向图和有向图的奇度顶点个数必为偶数。

  • 应用

在这里插入图片描述

5.1.7 图的度数列

设无向图G的顶点集V={v1, v2, …, vn}

G的度数列: d(v1), d(v2), …, d(vn)

如右图度数列:4,4,2,1,3 在这里插入图片描述

设有向图D的顶点集V={v1, v2, …, vn}

D的度数列: d(v1), d(v2), …, d(vn)

D的出度列: d+(v1), d+(v2), …, d+(vn)

D的入度列: d-(v1), d-(v2), …, d-(vn)

如右图度数列:5,3,3,3 在这里插入图片描述

        出度列:4,0,2,1
        入度列:1,3,1,2

例题:

  1. 一个部门有25个人,由于意见不同,是否可能每个人恰好与其他5个人意见一致?

    ​ A 可能 B 不可能

  2. 唐氏夫妇邀请另外三对夫妇来家里吃饭,已知每个人都不和自己握手,不和自己的配偶握手,同时最多和一人握手一次。在大家吃完饭后,唐先生问大家握了几次手,每个人的回答都不相同。请问:唐太太握手几次?

​ A 0 B 1 C 2 D 3 E 4 F 5 G 6

答案:1. B 2. D

5.1.8 多重图与简单图

(1)在无向图中,如果有2条或2条以上的边关联同一对顶点, 则称这些边为平行边, 平行边的条数称为重数
(2)在有向图中,如果有2条或2条以上的边具有相同的始点和终点, 则称这些边为有向平行边, 简称平行边, 平行边的条数称为重数
(3) 含平行边的图称为多重图
(4) 既无平行边也无环的图称为简单图

注意:简单图是极其重要的概念。

实例:在这里插入图片描述

5.1.9 完全图

n阶无向完全图Kn:每个顶点都与其余顶点相邻的n阶无向简单图

简单性质:边数m=n(n-1)/2,Δ=δ=n-1

K5在这里插入图片描述

n阶有向完全图:每对顶点之间均有两条方向相反的有向边的n阶有向简单图

简单选择:边数m=n(n-1),Δ=δ=2(n-1)

Δ++--=n-1

3阶有向完全图在这里插入图片描述

5.1.10 子图

设G=<V,E>,G’=<V’,E’>是两个图。

(1)若V’⊆V且E’⊆E,则称G’是G的子图,G是G’的母图,记作G’⊆G

(2) 若G’⊆G 且V’=V,则称G’为G的生成子图

(3) 若V’⊂V 或E’⊂E,称G’为G的真子图

(4) 设V’⊆V 且V’≠∅, 以V’为顶点集, 以两端点都在V’中的所有边为边集的G的子图称作V’的导出子图,记作 G[V’]。

(5) 设E’⊆E且E’≠∅, 以E’为边集, 以E’中边关联的所有顶点为顶点集的G的子图称作E’的导出子图, 记作 G[E’]。

注意:每个图都是本身的子图。

生成子图的实例:

K4的所有非同构的生成子图

在这里插入图片描述

导出子图的实例:

在这里插入图片描述

5.1.11 补图

定义:设G=<V,E>是n阶无向简单图,以V为顶点集,所有使G成为完全图Kn的添加边组成的集合为边集的图,称为G的补图。记作G’。若G≌G’,则G是自补图

5.1.12 图的同构

定义:G1=<V1,E1>, G2=<V2,E2>为两个无向图(有向图), 若存在双射函数 f: V1→V2, 使得对于任意的vi,vj∈V1, (vi,vj)∈E1(<vi,vj>∈E1)当且仅当 (f(vi),f(vj))∈E2(<f(vi),f(vj)>∈E2),并且, (vi,vj)(<vi,vj>)与 (f(vi),f(vj))(<f(vi),f(vj)>)的重数相同,则称G1与G2同构的,记作G1≌G2

同构实例:

在这里插入图片描述

左边上下两图是同构的,右边上下两图也是同构的。
在这里插入图片描述
在这里插入图片描述

说明:

  • 图之间的同构关系具有自反性对称性传递性

  • 能找到多条同构的必要条件,但它们都不是充分条件:

    边数相同,顶点数相同

    度列数相同(不计度数的顺序)

    对应定点的关联集及领域的元素个数相同,等等

  • 若破坏必要条件,则两图不同构

  • 至今没有找到判断两个图同构的多项式时间算法

例题:

(1)在这里插入图片描述

A 同构 B 不同构

(2)在这里插入图片描述

A 同构 B 不同构

(3)在这里插入图片描述

A 同构 B 不同构

答案:(1)A (2)A (3) B

### MATLAB中有向图添加边权重的方法 在MATLAB中,可以通过`graph`或`digraph`函数来创建无向图有向图,并为其添加边权重。以下是具体方法示例代码: #### 创建带权有向图 通过指定源节点、目标节点以及对应的权重数组,可以直接创建一个带有边权重的有向图。 ```matlab % 定义源节点、目标节点边权重 sourceNodes = [1, 1, 2, 2, 3]; targetNodes = [2, 3, 3, 4, 4]; weights = [0.5, 1.2, 2.0, 5.1, 3.7]; % 使用 digraph 函数创建带权有向图 G = digraph(sourceNodes, targetNodes, weights); % 显示图的边及其权重 disp(G.Edges); ``` 上述代码展示了如何利用`digraph`函数创建一个具有特定边权重的有向图[^1]。其中,`sourceNodes`表示源节点集合,`targetNodes`为目标节点集合,而`weights`则对应于各条边的具体权重值。 #### 绘制带权有向图 为了可视化该有向图并展示其边权重,可使用`plot`函数设置相应的参数。 ```matlab % 绘制图形并显示边权重 h = plot(G, 'EdgeLabel', G.Edges.Weight); % 调整布局以便更清晰地查看 title('带权有向图'); ``` 这段代码不仅绘制出了所构建的有向图结构,还借助`EdgeLabel`选项将每一条边上的权重标注出来[^4]。 #### 修改现有图中的边权重 如果已经存在一张图,则可通过更新`.Edges`表格内的数据实现对已有边权重的调整或者新增加某些属性字段。 ```matlab % 更新某一边的新权重 newWeightValue = 6; edgeToUpdateIdx = find(G.Edges.EndNodes(:,1)==1 & G.Edges.EndNodes(:,2)==2); if ~isempty(edgeToUpdateIdx) G.Edges.Weight(edgeToUpdateIdx) = newWeightValue; end % 查看更改后的结果 disp(G.Edges); ``` 这里说明了怎样定位到具体的某条边上进而改变它的数值大小[^3]。注意操作前需确认索引位置有效以免引发错误。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小邹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值