`

二分图总结

 
阅读更多

以下为我做题总结所得:

定义的作用是:判断某类问题能否用此类方法解决,所以定义的全面性,准确性非常重要!比如说定义手机,主要是用来远程通话的,如果我们需要

与别人联系就需要他了。而有手机做菜就不合适了!

二分图定义:边的两个端点分居两个集合中的图是二分图

二分图最大匹配的定义:将所有边占有的最少端点数即最小覆盖在无向图中图中无公共端点的最大边数端点总数-最大无关系点数

以上是针对无向图来说的,而有向图则是一条最长且不相交的有向路径节数,图中所有这样路径的总条数是:顶点数-最大路径节数;

最大无关系点数定义:以最小覆盖为障碍,图中无关系的最大点数(关于点的)

算法我习惯于读代码,因为那样更透彻,然后思想自然明了了!

算法原理:

定义点标记数组,定义边集;

遍历判断定点说在边是否为交错路径(无公共端点的最大边集)的一部分,不是则递归dfs以改变原边集,以求符合

是则记录入边集

其中的逆序边集用得最好

算法注意事项:二分图也可以有方向,方向不同的两条边,用全局变量时注意函数对它的影响;

算法代码示例:(以hdu1068为例http://acm.hdu.edu.cn/showproblem.php?pid=1068,红色部分为关键部分)

#include<stdio.h>//在二分图匹配中,edge【】存了匹配边,匹配边是无公共顶点的最大边数,即男女朋友的一对一特性且使,朋友的最少对数;

bool sign[1500];//标记顶点

int edge[1500];//edge[终边]=起始边

int map[1500][1500];//用的邻接表存储的图(但没用链表,没有发挥邻接表的优点——节省空间),其他方式也可以

int sum[1500];//map[][]合为邻接表

bool isedge(int start)//判断是否能加入增广路径中

{

int i;

for(i=0;i<sum[start];i++){

//printf("/n%d,%d/n",start,map[start][i]);

if(sign[map[start][i]]==false){

sign[map[start][i]]=true;

if(edge[map[start][i]]==-1||isedge(edge[map[start][i]])){//以每个点为起点放最多的有向边(方向不能相抗)这是回路,方向边都遵循的

edge[map[start][i]]=start;

//printf("=%d,%d/n",start,map[start][i]);

return true;

}

}

}

return false;

}

main()

{

int n,i,j;

int start,num,end,answer;

while(scanf("%d",&n)!=-1){

for(i=0;i<n;i++)

sum[i]=0;

for(i=0;i<n;i++){

scanf("%d: (%d)",&start,&num);

for(j=0;j<num;j++){

scanf("%d",&end);

map[start][sum[start]++]=end;

}

}

answer=0;

for(i=0;i<n;i++)

edge[i]=-1;

for(i=0;i<n;i++){

for(j=0;j<n;j++)

sign[j]=false;

if(isedge(i))

answer++;

}

printf("%d/n",n-answer/2);

}

return 0;

}

分享到:
评论

相关推荐

    二分图匹配算法总结1

    总结来说,二分图匹配算法在解决图论问题,特别是最大独立集和最大匹配问题时有着广泛的应用。匈牙利算法和Hopcroft-Karp算法是两种常用且高效的解决方案,它们在理论和实践中都有着重要的价值。理解这些算法有助于...

    图匹配总结-二分图匹配

    二分图匹配是图论中的一个经典问题,它涉及到将图中的节点分成两个不相交的集合,并在集合间寻找一一对应的关系,使得任意两个节点之间不存在边相连。在实际应用中,二分图匹配有着广泛的应用,如员工与岗位的分配、...

    二分图最优匹配matlab代码.zip

    总结来说,这个压缩包中的MATLAB代码提供了实现二分图最优匹配的工具,对于学习和解决实际问题中的配对优化问题具有很高的价值。通过深入理解这些代码,我们可以更好地掌握二分图最优匹配的理论和算法,并将其应用于...

    图论- 二分图- 二分图判定.rar

    图论是计算机科学和数学中的一个重要...总结来说,二分图是图论中的重要概念,它的判定和性质对于理解和解决许多实际问题至关重要。掌握二分图的相关知识不仅有助于理解图的结构,还能为算法设计和优化提供有力工具。

    二分图判定的源程序(C#)

    总结来说,"二分图判定的源程序(C#)"是一个关于图论和C#编程的实践项目,旨在帮助开发者理解如何在实际问题中应用图的理论,尤其是如何在C#环境下编写程序来判断一个无向图是否为二分图。通过这个项目,你可以提高对...

    用匈牙利算法求二分图的最大匹配

    ### 匈牙利算法在二分图最大匹配中的应用 #### 一、引言 匈牙利算法是一种高效地解决二分图最大匹配问题的方法。它最初由Kőnig和Egerváry在20世纪30年代提出,并在后续的研究中不断完善。该算法不仅具有较高的...

    二分图最大匹配及常用建图方法

    总结起来,二分图最大匹配和匈牙利算法是图论中的核心工具,它们在解决资源分配、调度问题等方面发挥着重要作用。通过理解增广路径和匈牙利算法的运作机制,我们可以有效地解决这类问题,同时还能发现算法之美。在...

    最优二分图问题的模版

    ### 最优二分图匹配问题解析 #### 一、引言 最优二分图匹配问题在计算机科学领域中属于一个非常重要的课题,特别是在算法设计与分析方面有着广泛的应用。二分图是一种特殊的图结构,其顶点可以被分为两个互不相交的...

    二分图匹配算法总结.doc

    二分图匹配算法总结.doc

    二分图最大匹配km算法

    ### 二分图最大匹配KM算法详解 #### KM算法概览 KM算法(Kuhn-Munkres Algorithm),也称为匈牙利算法的扩展版本,主要用于解决带权二分图的最佳匹配问题。简单来说,二分图是一种特殊的图结构,它可以被划分为两个...

    匈牙利法求二分图最大匹配

    ### 匈牙利法求二分图最大匹配详解 #### 一、二分图与最大匹配的基本概念 在深入探讨之前,我们先简单回顾一下二分图与最大匹配的概念。 **二分图**:二分图是一种特殊的无向图,其中的顶点可以分为两个互不相交...

    6. 二分图与平面图 -PPT.pptx

    总结来说,二分图和平面图在图论中占有重要地位。二分图提供了一种将图结构分为两个独立部分的方法,而平面图则允许我们在二维空间中无冲突地表示复杂网络。这两个概念在算法设计、数据结构、计算机图形学以及工程...

    基于二分图匹配的语义Web服务发现方法.docx

    总结来说,基于二分图匹配的语义Web服务发现方法为解决大规模服务集合中的服务发现问题提供了新思路。通过抽象为二分图并扩展最佳匹配的概念,该方法能够更准确地匹配服务,并且在处理服务接口依赖关系时表现优越。...

    图论- 二分图- KM 算法.rar

    总结来说,图论中的二分图和KM算法是解决匹配问题的重要工具。KM算法通过迭代寻找增广路径来达到最大匹配,其高效性和广泛适用性使其在计算机科学的多个领域中都有着重要的应用。了解和掌握这些理论知识对于进行网络...

    王俊--浅析二分图匹配在信息学竞赛中的应用1

    总结来说,二分图匹配在信息学竞赛中是一个核心工具,它能帮助解决各种优化问题,如运输规划、网络设计等。通过深入理解和灵活运用二分图匹配的理论及算法,参赛者可以有效地解决复杂的问题,并在竞赛中取得好成绩。

    二分图(匈牙利,KM算法详解).pptx

    总结来说,二分图和它的匹配理论在解决实际问题中扮演着关键角色,如资源分配、任务调度等。匈牙利算法提供了一种有效的方法来寻找最大匹配,而最小点覆盖则与之紧密相关,两者共同为我们提供了理解和解决这类问题的...

    二分图匹配的匈牙利算法

    ### 二分图匹配的匈牙利算法 #### 概述 在计算机科学与图论领域,二分图的最大匹配问题是指在一个二分图中找到一个尽可能大的匹配集合。匹配是指图中的边集,其中任意两条边都不共享同一个顶点。解决这类问题的一种...

    用匈牙利算法求二分图的最大匹配.doc

    ### 用匈牙利算法求解二分图的最大匹配 #### 一、二分图及其最大匹配概述 在深入探讨匈牙利算法之前,我们先简单回顾一下二分图的基本概念以及二分图的最大匹配问题。 **二分图**:指的是能够将其顶点集划分为两...

    算法学习:图论之用匈牙利算法求二分图的最大匹配.doc

    ### 知识点详解:使用匈牙利算法求解二分图的最大匹配 #### 一、二分图及其最大匹配的基本概念 - **二分图**:在一个无向图中,若可以把节点集分割成两个互不相交的子集(通常记作X和Y),使得图中的每条边都是连接...

    二分图匹配实例代码及整理

    总结起来,二分图匹配在解决资源分配、任务调度等问题中有广泛应用,如在计算机科学中的网络路由、作业调度等领域。匈牙利算法和KM算法都是解决这类问题的有效工具,它们通过不同的策略寻找最大匹配,确保资源的最优...

Global site tag (gtag.js) - Google Analytics