离散数学(二)

二分图

二分图判定

无奇长度回路

完备匹配判定

Hall定理(相异性条件)

∣ V 1 ∣ < ∣ V 2 ∣ |V_1| \lt|V_2| V1<V2 ∣ V 1 ∣ |V_1| V1中任取k个点至少与与 ∣ V 2 ∣ |V_2| V2中k个点相邻。

t条件

∣ V 1 ∣ < ∣ V 2 ∣ |V_1|\lt|V_2| V1<V2,存在t使得 ∣ V 1 ∣ |V_1| V1至少关联t个点, ∣ V 2 ∣ |V_2| V2至多关联t个点。


欧拉图

无向欧拉图判定

欧拉通路:图连通,恰好存在2个奇度定点。
欧拉回路:图连通,不存在奇度定点

有向欧拉图判定

欧拉通路:图连通,除两个端点之外,所有点的入度等于出度。
欧拉回路:图连通,所有点的入度都等于出度。


哈密顿图

必要条件

P ( G − ∣ V ∣ ) ≤ ∣ V ∣ P(G-|V|) \le|V| P(GV)V。证明:存在哈密顿通路,则满足这个关系。
推论:存在割点的图一定不是哈密顿图

充分条件

任意两点u,v,使得 d ( u ) + d ( v ) ≥ n − 1 d(u)+d(v)\ge n-1 d(u)+d(v)n1,则存在哈密顿通路。
使得 d ( u ) + d ( v ) ≥ n d(u)+d(v)\ge n d(u)+d(v)n,则存在哈密顿回路。

平面图

  1. 面的次数之和等于边数的两倍
极大平面图的性质
  1. 平面图是连通的
  2. 每个面的次数都是3
欧拉公式

连通平面图: 边 数 + 面 数 − 棱 数 = 2 边数+面数-棱数=2 +=2

含有k个连通分支的平面图: 边 数 + 面 数 − 棱 数 = k + 1 边数+面数-棱数=k+1 +=k+1

判定平面图

库拉图斯基定理(充要条件)
不含有与 K 3 , 3 K_{3,3} K3,3 K 5 K_5 K5同胚的子图

不可以收缩含有 K 3 , 3 K_{3,3} K3,3 K 5 K_5 K5的子图

对偶图
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
部图是指一个图的顶点可以被分为两个不交的集合,图的每条边的两个端点分别属于这两个集合。完备匹配是指图中的每个顶点有且仅有一条边与之关联的情况。 部图的所有完备匹配算法可以使用深度优先搜索(DFS)来实现。以下是用C代码表示的算法: ```c #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define N 100 bool visited[N]; // 记录顶点是否已访问 int match[N]; // 记录匹配的顶点 int g[N][N]; // 图的邻接矩阵 bool dfs(int u, int m, int n) { // 对顶点u进行深度优先搜索,m和n分别是左右两个集合的大小 for (int v = 1; v <= n; v++) { if (g[u][v] && !visited[v]) { visited[v] = true; // 如果v还未匹配或者能找到增广路径的下一个点 if (match[v] == 0 || dfs(match[v], m, n)) { match[v] = u; return true; } } } return false; } int bipartiteMatching(int m, int n) { // 部图的完备匹配 int count = 0; for (int u = 1; u <= m; u++) { // 初始化visited数组 for (int i = 1; i <= n; i++) { visited[i] = false; } if (dfs(u, m, n)) { count++; } } return count; } int main() { int m, n; // 分别代表左右两个集合的大小 scanf("%d %d", &m, &n); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { scanf("%d", &g[i][j]); // 输入边的信息 } } int matching = bipartiteMatching(m, n); printf("完备匹配的个数:%d\n", matching); return 0; } ``` 在上述代码中,我们使用邻接矩阵来表示部图的边的关系,g[i][j]为1表示第i个点和第j个点之间有一条边。match[]数组用来记录匹配的顶点,初始时所有元素为0。dfs()函数是主要的搜索函数,用来寻找增广路径。bipartiteMatching()函数是部图完备匹配的主要函数,通过遍历左侧集合中的每个顶点来找到所有的完备匹配。最终输出找到的完备匹配的个数。 希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值