hdu 2119 Matrix (最小覆盖)

来源:互联网 发布:淘宝怎么修改价格 编辑:程序博客网 时间:2024/05/19 16:05

点击打开链接

题目大意:一次走一行或一列,最少几次能把其中的1消去。

思想:以行作为一顶点子集,以列作为另一顶点子集。求出最大匹配。

#include"stdio.h"#include"string.h"#define N 101int map[N][N],v[N],link[N];int n,m;int dfs(int k){int i;for(i=1;i<=m;i++){if(map[k][i]&&!v[i]){v[i]=1;if(link[i]==-1||dfs(link[i])){link[i]=k;return 1;}}}return 0;}int main(){int i,j,ans;while(scanf("%d",&n)!=-1){if(!n)break;scanf("%d",&m);memset(map,0,sizeof(map));for(i=1;i<=n;i++){for(j=1;j<=m;j++)scanf("%d",&map[i][j]);}ans=0;memset(link,-1,sizeof(link));for(i=1;i<=n;i++){memset(v,0,sizeof(v));if(dfs(i))ans++;}printf("%d\n",ans);}return 0;}


原创粉丝点击