哈哈,第一篇,贴上匈牙利的DFS模版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//a->b的最大匹配
int match[b];
int visit[b];
int map[a][b];
int dfs(int k)
{ int i,temp;
for(i = 1;i<=b;i++)
{ if(map[k][i]&&!visit[i])
{visit[i] = 1;
temp= match[i];
if(temp == -1 || dfs(temp))
{ match[i] = k; //翻转路径
return 1;
}
}
}
return 0;
}
int hungry()
{ int i,count=0;
memset(match,-1,sizeof(match));
for(i = 1;i <= a;i++)
{memset(visit,0,sizeof(visit));
count += dfs(i);
}
return count;
}
顺便列举一下POJ上面做过的比较简单地二分图的问题
2239,1087,1466,2536,2594,1422,1469,