第九章 二分图平面图和树王元元
什么是二分图

(4)当(2),(3)步骤中断于情况(I),则将增广 路中非匹配边改为匹配边,原匹配边改为 非匹配边(从而得到一个比原匹配多一条边 的新匹配),回到步骤(1),同时消除一切 现有标记。 (5)对一切可能,(2)和(3)步骤均中断于情况 (II),或步骤(1)无可标记结点,算法终止(算法 找不到交替链).
A
B
什么是二分图?
二分图的一个等价定义:不含有(含奇数条边
的环)的图。图1是一个二分图。为了清晰,我们都 把它画成图2的形式。 无向图G为二分图的充分必要条件是,G至少有 两个顶点,且其所有回路的长度均为偶数
匹配
在图论中一个匹配是一个边的集合,其中任意 两条边都没有公共顶点。例如,图3中红色的边。
二分图及其应用
(Bipartite Graph & Applications)
主要内容:
什么是二分图? 二分图的各种匹配的定义?
如何利用匈牙利算法求最大匹配?
二分图的最小顶点覆盖 DAG图的最小路径覆盖 二分图的最大独立集
什么是二分图?
二分图又称作二部图,是图论中的一种特殊模型。 设 G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的 子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i 和j分别属于这两个不同的顶点集(i in A,j in B),则称图G 为一个二分图。
样例1二分图
样例2二分图
n1 n2 n3
p1 p2 p3
n1
p1 p2 p3
n2
n3
画图详细ห้องสมุดไป่ตู้详解过程
实现代码
#include<stdio.h> #include<string.h> int m,n; int G[110][310],link[310]; bool vis[310];
二分图——精选推荐

⼆分图⼆分图⿊⽩染⾊,邻点异⾊⼆分图⼀定⽆奇环(奇环——边数点数都是奇数)完全⼆分图⽤kn,m表⽰(完全图⽤kn表⽰)染⾊判断⼆分图 ⾸先任意取出⼀个顶点进⾏染⾊,和该节点相邻的点有三种情况: 1.未染⾊那么继续染⾊此节点(染⾊为另⼀种颜⾊) 2.已染⾊但和当前节点颜⾊不同跳过该点 3.已染⾊并且和当前节点颜⾊相同返回失败(该图不是⼆分图)0表⽰还未访问,1表⽰在集合A中,2表⽰在集合B中。
col(color)储存颜⾊,初始化为0.vector <int> v[N];void dfs(int x,int y) {col[x]=y;for (int i=0;i<v[x].size();i++) {if (!col[v[x][i]]) dfs(v[x][i],3-y);if (col[v[x][i]]==col[x]) FLAG=true;}}for (i=1; i<=n; i++) col[i]=0;for (i=1; i<=n; i++) if (!col[i]) dfs(i,1);if (FLAG) cout<<"NO"<<endl;else cout<<"YES"<<endl;判断奇环(flag==1奇环)注意,在每个连通块⾥都要取最⼩值#include<iostream>#include<cstdio>#include<cstring>#include<vector>using namespace std;#define N 200050vector< int >g[N];int n,m,ans1,ans2,ans;int col[N],dep[N];//1 white 2 blackbool flag,vis[N];void dfs(int x,int c){col[x]=c;if(c==1)ans1++;else ans2++;for(int i=0;i<g[x].size();i++){int y=g[x][i];if(!col[y])dfs(y,3-c);else if(col[y]==col[x]) flag=1;}}void check(int x){for(int i=0;i<g[x].size();i++){int y=g[x][i];if(!vis[y])vis[y]=1,dep[y]=dep[x]+1,check(y);else if((dep[x]-dep[y])%2==0)flag=1;}}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){vis[i]=1;col[i]=100;}for(int i=1,x,y;i<=m;i++){scanf("%d%d",&x,&y);g[x].push_back(y);g[y].push_back(x);vis[x]=vis[y]=0;col[x]=col[y]=0;}flag=0;for(int i=1;i<=n;i++)if(!vis[i])vis[i]=1,check(i);for(int i=1;i<=n;i++){ans1=ans2=0;if(!col[i])dfs(i,1);ans+=min(ans1,ans2);}if(flag)puts("Impossible");else printf("%d\n",ans) ;return 0;}这道题有⼀种扩展域并查集的解法,题意抽象出来的模型就是:给定⼀张⽆向图,边有边权。
图论专题 二分图

图论专题二分图朝花夕拾2010-12-28 17:56:46 阅读66 评论0 字号:大中小订阅二分图:二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联的两个顶点恰好一个属于集合X,另一个属于集合Y。
二分图匹配:给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。
最大匹配:图中包含边数最多的匹配称为图的最大匹配。
完美匹配:如果所有点都在匹配边上,则称这个最大匹配是完美匹配。
二分图匹配基本概念:未盖点设VI是G的一个顶点,如果VI不与任意一条属于匹配M的边相关联,就称VI是一个未盖点。
交错轨设P是图G的一条轨,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是交错轨。
可增广轨(增广路)两个端点都是未盖点的交错轨称为可增广轨。
可增广轨的性质:1:P的路径长度必定为奇数,第一条边和最后一条边都不属于M。
2:P经过取反操作可以得到一个更大的匹配M’。
3:M为G的最大匹配当且仅当不存在相对于M的增广路径。
二分图最大匹配匈牙利算法:算法的思路是不停的找增广轨,并增加匹配的个数,增广轨顾名思义是指一条可以使匹配数变多的路径,在匹配问题中,增广轨的表现形式是一条"交错轨",也就是说这条由图的边组成的路径,它的第一条边是目前还没有参与匹配的,第二条边参与了匹配,第三条边没有..最后一条边没有参与匹配,并且始点和终点还没有被选择过.这样交错进行,显然他有奇数条边.那么对于这样一条路径,我们可以将第一条边改为已匹配,第二条边改为未匹配...以此类推.也就是将所有的边进行"取反",容易发现这样修改以后,匹配仍然是合法的,但是匹配数增加了一对.另外,单独的一条连接两个未匹配点的边显然也是交错轨.可以证明,当不能再找到增广轨时,就得到了一个最大匹配.这也就是匈牙利算法的思路。
代码://匈牙利算法复杂度o(nm)#include<iostream>using namespace std;const int MAXN = 1001,MAXM = 1001;int n1,n2,m,ans;//n1,n2分别为二分图两边节点的个数,两边的节点分别用1..n1,1..n2编号,m为边数bool g[MAXN][MAXM];//图G邻接矩阵g[x][y]bool y[MAXM];//Y集合中点i访问标记int link[MAXM];//link[y]表示当前与y节点相邻的x节点void init(){int x,y;memset(g,0,sizeof(g));memset(link,-1,sizeof(link));ans = 0;scanf("%d%d%d",&n1,&n2,&m);for (int i = 1;i <= m;i++){scanf("%d%d",&x,&y);g[x][y] = true;}}bool find(int x)//是否存在X集合中节点x开始的增广路{for (int i = 1;i <= n2;i++)if (g[x][i] && !y[i])//如果节点i与x相邻并且未访问过{y[i] = true;if (link[i] == -1 || find(link[i]))//如果找到一个未盖点i中或从与i相邻的节点出发有增广路{link[i] = x;return true;}}return false;}int main(){init();/*for (int j = 1;j <= n2;j++)for (int i = 1;i <= n1;i++)if (g[i][j] && !link[j])link[j] = i;//贪心初始解优化*/for (int i = 1;i <= n1;i++){memset(y,0,sizeof(y));if (find(i))ans++;}printf("%d\n",ans);return0;}真正求二分图的最大匹配的题目很少,往往做一些简单的变化:变种1:二分图的最小顶点覆盖最小顶点覆盖要求用最少的点(X或Y中都行),让每条边都至少和其中一个点关联。
二分图匹配及其应用-PPT精品

例题4. Unstable Systems(SGU218)
• 求一个完备匹配,使得匹配边中权值最大 的边权值最小。
分析
• 算法一
– 二分选择flow,并且进行最大匹配
• 算法二
– 从权值最低的边开始,每次增加一条边。维护 交错树森林,最多只可能增加一个交错轨。
– 因为找到N条交错轨即可,而维护交错树森林 的平摊复杂度为O(1),所以总时间复杂度依然 为O(N3)
– 时间复杂度 O ( n m )
• 基于DFS的算法: 每次选一个未盖点u进行DFS. 如果找不到 增广路则换一个未盖点, 且以后再也不从u出发找增广路.
Hopcroft算法
• 可以证明:如果每次找到的最短增广路集是极大 的,则只需要增广O ( n ) 次
• 关键:用O(m)时间找一个极大最短增广路集 • 步骤1:用距离标号扩展匈牙利树,找到第一个
• 实际上不需要单独建立二分图,直接在图 上操作即可。 点和边都是O(N2)个, 因此时 间复杂度为O(N3)
例题3. Speleology(POI9906)
• 一个山上有一个很大的洞,其中有n个室, 编号为1~n,室与室之间有通道。编号越大 的室在越下方。有一批洞穴学者要从编号 为1的室走到编号为n的室中,途中他们只 能从编号小的地方走到编号大的地方。每 条和1或n相连的通道只允许一个人通过。 问:最多可以有多少名洞穴学者?
分析
• 可以用二分图的最佳匹配 • 因为这个图有特殊性,男孩子一边任一个
点连出的所有边的权值都是相同的,所以 只要将男孩子按照国王的喜欢程度从大到 小排序,先对国王更喜欢的孩子扩展增广 路径,就可以得到最优解。这是为什么呢?
分析
• 由增广路的性质可以知道一条增广路的应 用只可能在匹配的男孩子中加入一个人, 而不可能删去任意一个人。
离散数学课件_9 树与平面图

1.概念:有向树,根树,树叶,内点,分支
点,层数,树高,祖先,后代,父亲,儿子,
兄弟,有序树,m叉树,完全m叉树,根子树,
左子树,右子树,带权二叉树,最优二叉
树,前缀,前缀码,二元前缀码,二叉树遍
历等;
4
返回本章首页
2019/12/4
第三节 有向树与根树(2)
2.定理: 设T是一棵根树,r是T的树根,则 对于T的任一顶点v,存在唯一的有向路 从r到v;
3.算法:最优二叉树的Huffman算法;
4.前缀码问题:前缀码与二叉树的对应关 系;
5.二叉树的遍历:三种遍历方法,即先根遍 历,中根遍历,后根遍历法.
返回本章首页
5 2019/12/4
第四节 平面图
平面图是很多实际问题的模型. 例如在 集成电路的布线设计中就遇到了平面图 的问题.
1.基本概念:平面图,平面嵌入,面,无限 面(外部面),内部面,边界,次数等;
第九章 树与平面图
树是一类结构较为简单的图,是用途极 为广泛的离散数学模型,特别是二叉树, 它在计算机科学中用得最多.因此在学习 时应很好地掌握好诸如树的充要条件、 生成树、最优生成树、根树、树的各种 算法、及二叉树的访问次序等内容.平面 图是实际背景很强的一类图,能用本章 介绍的方法判断一个图是否为平面图.
2.基本非平面图:K3,3与K5; 3.平面图的欧拉公式; 4.平面图的判定:库拉图斯基定理.
返回本章首页
6 2019/12ቤተ መጻሕፍቲ ባይዱ4
本章小结
本章我们介绍树与平面图,但以介绍树 为主.给出树的定义及树的充要条件, 生成树、最优生成树及最优生成树的克 鲁斯卡尔算法,特别是二叉树,我们讨 论 了 二 叉 树 的 Huffman 算 法 、 前 缀 码 、 二叉树的遍历等问题.最后介绍了一类 实际背景很强的一类图——平面图.
二部图欧拉图哈密尔顿图平面图教学课件

网络设计:用于设计网络拓扑结构,如路由器、交换机等设备的连接
电路设计:用于设计电路板布局,如PCB板、集成电路等
地图绘制:用于绘制地图,如城市地图、交通地图等
建筑设计:用于设计建筑布局,如房屋、办公楼等
物流规划:用于规划物流网络,如仓库、配送中心等
城市规划:用于规划城市布局,如道路、公园等
汇报人:
哈密尔顿图是平面图的一种特殊情况,即每个顶点的度数都是2
哈密尔顿图定义:每个顶点的度数等于图中的边数
哈密尔顿图的性质:哈密尔顿图是欧拉图
哈密尔顿图的判定方法:通过计算每个顶点的度数来判断
哈密尔顿图的应用:在图论、计算机科学等领域有广泛应用
PART FIVE
平面图是一种特殊的图,其顶点和边都在同一个平面上
哈密尔顿图是一种特殊的图,其每个顶点的度数都是2或0。
哈密尔顿图是一种特殊的欧拉图,其每个顶点的度数都是2。
哈密尔顿图是一种特殊的平面图,其顶点和边都可以在平面上表示出来。
哈密尔顿图是一种特殊的图,其每个顶点的度,即每个顶点的度数都是2
哈密尔顿图是二部图的一种特殊情况,即每个顶点的度数都是2
在数学中,哈密尔顿图可以用于研究图的性质,如图的连通性、图的色数等。
哈密尔顿图在图论中具有重要的应用价值,特别是在网络流、电路设计等领域。
在计算机科学中,哈密尔顿图可以用于解决一些NP-hard问题,如旅行商问题、背包问题等。
在物理学中,哈密尔顿图可以用于描述量子系统的状态空间,从而进行量子计算和量子信息处理。
汇报人:
,
CONTENTS
PART ONE
PART TWO
二部图是一种特殊的图,由两个部分组成,每个部分包含一组节点每个节点只能与另一部分的节点相连,不能与同一部分的节点相连二部图的节点可以分为两个集合,每个集合中的节点只能与另一个集合中的节点相连二部图的边可以分为两种类型,一种是连接两个不同集合的边,另一种是连接同一集合中的边二部图的性质包括:每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边数,每个节点度数之和等于边
二分图的讲解

例 3个图的匹配数 依次为3, 3, 4.
4
匹配 (续)
设M为G中一个匹配 vi与vj被M匹配: (vi,vj)M v为M饱和点: M中有边与v关联 v为M非饱和点: M中没有边与v关联 M为完美匹配: G的每个顶点都是M饱和点
例 关于M1, a,b,e,d是饱和点 f,c是非饱和点
M1不是完美匹配
(1)
(2)
(3)
6
Hall定理
定理(Hall定理) 设二分图G=<V1,V2,E>中,|V1||V2|. G中存 在从V1到V2的完备匹配当且仅当V1中任意k 个顶点至少与V2 中的k个顶点相邻(k=1,2,…,|V1|). 由Hall定理不难证明, 上一页图(2)没有完备匹配.
定理 设二部图G=<V1,V2,E>中, 如果存在t1, 使得V1中每个 顶点至少关联 t 条边, 而V2中每个顶点至多关联t条边,则G 中存在V1到V2的完备匹配.
注意: n 阶零图为二分图.
2
二分图的判别法
定理 非平凡无向图G=<V,E>是二分图当且仅当G中 无奇数长度的回路
例 下述各图都是二分图
3
匹配
设G=<V,E>, 匹配(边独立集): 任2条边均不相邻的边子集 极大匹配: 添加任一条边后都不再是匹配的匹配 最大匹配: 边数最多的匹配
匹配数: 最大匹配中的边数, 记为1
M2是完美匹配
M1
M2
5
二分图中的匹配
定义 设G=<V1,V2,E>为二部图, |V1||V2|, M是G中最 大匹配, 若V1中顶点全是M饱和点, 则称M为G中V1 到V2的完全匹配. 当|V1|=|V2|时, 完备匹配变成完美 匹配.
lecture_09_2二分图及其应用

匈牙利算法是基于Hall定理中充分性证
明的思想,其基本步骤为:
1.任给初始匹配M; 2.若X已饱和则结束,否则进行第3步; 3.在X中找到一个非饱和顶点x0,
作V1 ← {x0}, V2 ← Φ; 4.若T(V1) = V2则因为无法匹配而停止,否
则任选一点y ∈T(V1)\V2; 5.若y已饱和则转6,否则做一条从x0 →y的
男1 男2 返回
女1
女2
女3
13 2020/11/23
图示(2):
女1 男1
女2 男2
女3 返回
X0=男2 V1={男2} V2 = Φ T(V1)={女1} Y=女1 V1={男2,男1} V2 ={女1} Y=女2
M←M⊕E(P) ( 其中,P是从x0 →y 的可增广道路 )
14 2020/11/23
可增广道路P,M←M⊕E(P),转2; 6.由于y已饱和,所以M中有一条边(y,z),作
V1 ← V1 ∪{z}, V2 ← V2 ∪ {y}, 转4;
15 2020/11/23
图示(3):
女1 男1
男2
女2
返回
X0=男2 V1={男2} V2 = Φ T(V1)={女1} T(V1) != V2
8 2020/11/23
如何求二分 图的最大匹 配呢?
9 2020/11/23
经典算法:
匈牙利算法
10 2020/11/23
/*hdoj_1150匈牙利算法 月下版 */ #include<iostream> #include<string> #include<vector> using namespace std; bool mark1[100],mark2[100]; int list[100]; int n,m,edge,num; vector<vector<int> > v; bool dfs(int to) { register int i,point,s = list[to]; for(i=0;i<v[s].size();i++) { point = v[s][i]; if(!mark2[point]) continue; mark2[point] = false; if(list[point]==-1 || dfs(point)){ list[point] = s; return true; } } return false; } void Solve() { int i,j,point; bool flog = false; memset(mark1,true,sizeof(mar k1)); memset(list,-1,sizeof(list)); num=0; for(i=0;i<n;i++) { for(j=0;j<v[i].size();j++) if(list[v[i][j]] == -1) { mark1[i] = false; list[v[i][j]] = i; num++; if(i==0) flog = true; break; } }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
匹配的应用
安排工作:现有6个工人{x1,x2,…,x6}, 有6项工作{y1,y2,…,y6}。假设在同 一时间内,每人只能干一项工作,每项工 作只需一个人干,每个工人能干的工作用 边来表示。 安排工作就是求二分图的一个匹配问题。求 最大匹配就是一个工作最佳的安排问题, 使尽可能多的人有工作干,尽可能多的工 作被人干。
45
应当指出,欧拉公式及其上述推论, 都只是平面连通图或平面连通简单图的必 要条件,而不是它们的充分条件,因此只 能用它们判别非平面图,不能用它们来识 别平面图。
46
(1)切割操作
(1)对边e的切割操作。设G中有边e = {u,v},对边e作切割操作是指: 1) 取消边e。
2) 增加顶点w,以及 边e1 = {u,w}, 边e2 = {w,v}。
10
例9-2 图9-2中各图的红线表示匹配中 的边(简称匹配边)。
(a)
(b)
G (c)
11
9.1.2
匹配
注意:
最大匹配总是存在但未必唯一;
X(Y)-完全匹配及G的完全匹配必定是最 大的,但反之则不然;
X(Y)-完全匹配未必存在,存在不唯一。
12
有四名教师张征、王兴、李忠和赵华,分别 派他们教四门课程:数学、物理、电工和计 算机导论。张征懂物理和电工;王兴懂数学 和计算机导论;李忠懂数学、物理和电工; 赵华只懂电工。问应该如何分派,才不会使 任何人去讲他不懂的课程而又不存在有的课 程无人教?
y1
y2
y3
y4
y5
y6
y7
22
例9-3 用匈牙利算法求图9.3的一个最大匹配。
x1 x2 x3 x4 x5 x6
y1
y2
y3
y4
y5
y6
y7
23
例9-3 用匈牙利算法求图9.3的一个最大匹 配。
x1 x2 x3 x4 x5 x6
y1
y2
y3
y4
y5
y6
y7
24
完全匹配的存在条件
定义图G = <V,E>的顶点子集SV的相 邻顶点集N(S)(所有与S中顶点相邻的顶点 组成的集合):
N(S) = {v vV∧ue(uS∧eE∧ e= {u, v})} 或 N(S) = {v ue(uS∧e = {u, v})}
25
完全匹配的存在条件
定理9-2 设图G = <X,E,Y>。G有X-完 全匹配的充分必要条件是: 对每一SX有N(S)≥ S
霍尔婚姻定理
26
例
x1
x2
x3
y1
y2
y3
y4
27
应用
有六位未婚女子,L1 , L2 , L3 , L4 , L5 , L6 和六位未婚 男子,G1 , G2 , G3 , G4 , G5 , G6 中 六位女子分别对下列集合的男子中意: L1 :{G1 , G2 , G4 }, L2 :{G3, G5}, L3 :{G1 , G2 , G4 }, L4 :{G2 , G5 , G6 }, L5:{G3 , G6}, L6 :{G2 , G5 , G6 } 六位男子分别对下列集合的女子中意: G1 :{L1 , L3 , L6 }, G2 :{L2 , L4 , L6 }, G3 :{L2 , L5}, G4 :{L1 , L3}, G5:{L2 , L6}, G6 :{L3 , L4 , L5 }
匈牙利算法
求最大匹配的一种显而易见的算法是: 先找出全部匹配,然后保留匹配数最多的。 但是这个算法的复杂度为边数的指数级函 数。因此,需要寻求一种更加高效的算法。
18
匈牙利算法
用交替链求最大匹配(称作匈牙利算法,匈牙利 数学家Edmonds于1965年提出) 算法轮廓: (1)置M为空 (2)找出一条交错链P,通过取反操作获得更 大的匹配M′代替M (3)重复(2)操作直到找不出交错链为止
43
推论
定理9-9 顶点数n不少于4的平面连通简 单图G,至少有一个顶点的度数不大于5。
44
证明:定理9-9的结论可加强为“至少有 3个顶点的度数不大于5”。
证 用反证法。假设度数不大于5的顶点数 可以少于3个,但由于n不小于4且为连通 图,所以每个顶点的度数最小为1。因此 6(n – 2) + 2≤2m。 由于m≤3n – 6,故 6(n – 2) + 2≤2m≤6n – 12, 即 6n – 10≤6n – 12 矛盾。 因而度数不大于5的顶点数至少有3个。
3
例9-1
简单无向图G是二分图,当且仅当G可二着色。
4
判断二分图的定理
定理9-1 无向图G为二分图的充分必要条件 是,G至少有两个顶点,且其所有回路的长度 均为偶数。
推论 任何无回路的图均是二分图。
5
例:
6
练习
六名间谍a,b,c,d,e,f被我捕获,他们分别懂得的语言是 a:汉语,法语,日语; b:德语,日语,俄语; c:英语,法语; d:汉语,西班牙语; e:英语,德语; f:俄语,西班牙语。 问至少用几个房间监禁他们,才能使同一房间的人不能 互相直接对话。
47
例9-9
v e
(a)
(b) 边e切割
48
(2) 贯通操作
(2)对顶点v的贯通操作。设G中有二度 顶点v,它是e1= {u,v},e2= {v,w}的共同端点。对顶点v作贯通操 作是指: 1)取顶点v以及边e1,e2。 2)增加边e = {u,w} 。 切割与贯通是互逆的,两者常被称为 同胚运算。
53
例9-13
( a)
(b)
( c)
54
性质
定理9-12 树和森林都是可2-着色的,从 而都是二分图。 定理9-13 树和森林都是平面图,其面数 为 1。
55
性质
定理9-14 设图T为一树,其顶点数、边 数分别是n, m, 那么 n–m=1 或 m=n–1
56
性质
定理9-15 任何非平凡数树都至少有两片叶。
57
树等价定义形式
(1) T无回路且m = n – 1 。 (2) T连通且m = n – 1 。 (3) T无回路,但任意添加边时,T中 产生唯一的一条回路。 (4) T连通,但删去任一边时便不再连 通(T的每一边均为割边)。 (5) 任意两个不同顶点之间有且仅有一 条通路。
58
树等价定义形式
2
9.1 二分图
9.1.1 二分图的基本概念 定义9-1 无向图G = <V,E>称为二分图(bipartite graph),如果有非空集合X,Y使X∪Y = V, X∩Y = ,且对每一eE,都有 e = {x, y},xX,yY。此时常用<X,E,Y>表 示二分图G。 若对X中任一x及Y中任一y恰有一边eE, 使e = {x, y}, 则称G为完全二分图(complete bipartite graph)。 当X = m,Y = n时,完全二分图G记为Km,n。
33
例9-6
v5 r5
v6 r4
v7
v4
r3
v3
r2
v2
v1
r1
v8
34
平面简单图的所有有界面的 度均不小于3。
35
9.2
平面图
定义9-6 称平面简单图G是极大平面图 (maximal planar graph),如果在 G中添加任一边(它不是环,也不是其他边 的平行边)后所得的图均非平面图。
14
术语介绍
定义9-3 设G = <X,E,Y>, M为G的一个匹配。 (1) M中边的端点称为M-顶点, 其它顶点称为非M-顶点。
15
术语介绍
定义9-3 (2)G中vk到vl的通路P称为交替链,如果P 的起点vk和终点vl为非M-顶点,而其边的序 列中非匹配边与匹配边交替出现 (从而首尾两边必为非匹配边,除顶点vk, vl以外各顶点均为M-顶点)。
特别地,当一边{v, v'}两端点均为非M顶点,通路{v, v'}亦称为交替链。
16
由交替链的定义可以推出下述三个结论: 1) P的路径长度必定为奇数,第一条边和 最后一条边都不属于M。 2) P经过取反操作可以得到一个更大的匹 配M′。
3) M为G的最大匹配当且仅当不存在相对 于M的交替链。
17
30
例
B
A
31
K3,3与K5称为库拉托夫斯基(Kuratowski)图 共同点: (1)它们都是正则图。 (2)去掉一条边时它们都是平面图。 (3)K3,3是边数最少的非平面简单图, K5是顶点数最少的非平面简单图,因而它们 都是最基本的非平面图。
32
9.2
面的概念
定义9-5 平面连通图中各边所界定的区域 (不包含任何边和结点)称为平面图的面 (regions)。 有界的区域称为有界面, 无界的区域称为无界面。 界定各面的闭的拟路径称为面的边界 (boundary), 它的长度称为面的度(degree)。
49
例9-9
v e
(a)
(c) 顶点v贯通
50
3 库拉托夫斯基定理
定理9-10 图G是平面图,当且仅当对G 或G的子图作任何同胚操作后所得图均不 以K5及K3,3为子图。
51
例
( a)
(b)
( c)
52
9.3
树
9.3.1 树的基本概念 定义9-9 连通无回路的无向图称为无向树, 简称为树(tree)。 树中的悬挂点又称为树叶(leave), 其它结点称为分支点(branched node)。 单一孤立结点称为空树(null tree)。 诸连通分支均为树的图称为森林(forest), 树也是森林。
7
判断二分图的定理