随笔分类 -  二分图

摘要:这个题的题意是:在一个城镇中有路口和街道,这些街道是单向的并且不会形成环。每一个路口都会降落一名士兵,这些士兵会沿着街道的方向走。求走完所有路口所需要最少的士兵个数。归纳这个题可得为,有向无环图的最小路径覆盖数,可以通过匈牙利算法求得。在建图的过程中,跟无向图的建图类似,但是单向的。以下是代码:View Code 1 #include <iostream> 2 #include <memory.h> 3 #include <stdio.h> 4 using namespace std; 5 6 bool array[121][121]; 7 int res[ 阅读全文
posted @ 2012-07-19 15:49 pushing my way 阅读(478) 评论(0) 推荐(0)
摘要:这个题目的大意是:在一个矩阵中,*代表城市,要对这些城市覆盖无线网,每一个无线网可以覆盖最多两个城市,求将这些城市都覆盖上无线网时需要最小的无线网个数。因为无线网最多可以覆盖两个城市,也就是要找在两个城市中间的一条边,这让我想到了是最短路径覆盖问题,由于没有方向性的问题,所以确定为无向图的最短路径覆盖问题。编程过程中出现了一些问题:1.一开始在选择数据结构的时候考虑不足,开了一个二维数组存储城市的*和O,其实没有必要存储*和o,只需要在这个二维数组中记录城市的标号即可。2.在使用scanf()时出现bug,scanf(“%c”)会接受回车,所以应该在必要的地方用getchar()吸收回车,这个 阅读全文
posted @ 2012-07-19 11:26 pushing my way 阅读(907) 评论(0) 推荐(0)
摘要:这道题是一个基本的匈牙利算法,求最大二分匹配。之前在算法导论中学习网络流,明白了网络流中的残留网络,增光路和割,但是去模拟书上的伪代码感觉很是费力。就打算从最基本的匈牙利算法做起。下面先介绍一下匈牙利算法:该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法:匹配是边集的子集。设M是图G的一个匹配,需要掌握一下几个概念:1.M-交错路:M-交错路是一条通路,这条通路中的边为属于M与不属于M但属于G的边交替出现。2.M-饱和点:M-饱和点是与M中的某条边相关联的点。否则是非M-饱和点。3.M-可增广路:M-交错路的起点和终点都是非M-饱和点。设P是M-可增广路,则可以得出以下三 阅读全文
posted @ 2012-07-13 21:49 pushing my way 阅读(872) 评论(0) 推荐(0)