/* * Copyright 1997, Regents of the University of Minnesota * * mincover.c * * This file implements the minimum cover algorithm * * Started 8/1/97 * George * * $Id: mincover.c,v 1.1 1998/11/27 17:59:22 karypis Exp $ */ #include /************************************************************************* * Constants used by mincover algorithm **************************************************************************/ #define INCOL 10 #define INROW 20 #define VC 1 #define SC 2 #define HC 3 #define VR 4 #define SR 5 #define HR 6 /************************************************************************* * This function returns the min-cover of a bipartite graph. * The algorithm used is due to Hopcroft and Karp as modified by Duff etal * adj: the adjacency list of the bipartite graph * asize: the number of vertices in the first part of the bipartite graph * bsize-asize: the number of vertices in the second part * 0..(asize-1) > A vertices * asize..bsize > B vertices * * Returns: * cover : the actual cover (array) * csize : the size of the cover **************************************************************************/ void MinCover(idxtype *xadj, idxtype *adjncy, int asize, int bsize, idxtype *cover, int *csize) { int i, j; idxtype *mate, *queue, *flag, *level, *lst; int fptr, rptr, lstptr; int row, maxlevel, col; mate = idxsmalloc(bsize, -1, "MinCover: mate"); flag = idxmalloc(bsize, "MinCover: flag"); level = idxmalloc(bsize, "MinCover: level"); queue = idxmalloc(bsize, "MinCover: queue"); lst = idxmalloc(bsize, "MinCover: lst"); /* Get a cheap matching */ for (i=0; i