poj 2226 最大流二分匹配
2012-06-24 19:38
465 查看
不能一次消除一行或一列,只能一次消除相邻的,怎么办?
实质上只是需要一步预处理。扫描一遍输入的矩阵,把每行和每列中相邻的障碍物看成一个点,记录一下,然后加边。这样就转化成了poj3041: http://blog.csdn.net/challenchenzhipeng/article/details/7687918
实质上只是需要一步预处理。扫描一遍输入的矩阵,把每行和每列中相邻的障碍物看成一个点,记录一下,然后加边。这样就转化成了poj3041: http://blog.csdn.net/challenchenzhipeng/article/details/7687918
#include<stdio.h> #include<string.h> #include<stdlib.h> #define maxn 2000 int match[maxn]; int map[maxn][maxn]; bool v[maxn]; int nx,ny;//x的数目和y的数目 char s[52][52]; int cx[52][52]; int cy[52][52]; int n,m; bool dfs(int p) { int i; for(i=1;i<=ny;i++) { if(map[p][i]&&!v[i]) { v[i]=1; if(match[i]==-1||dfs(match[i])) { match[i]=p; return 1; } } } return 0; } int Hungry() { int i; int ans=0; for(i=1;i<=nx;i++) { memset(v,0,sizeof(v)); if(dfs(i)) ans++; } return ans; } int main() { int i,j,k; scanf("%d%d",&n,&m); getchar(); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { s[i][j]=getchar(); } getchar(); } nx=0; ny=0; for(i=1;i<=n;i++)//在水平方向上查找连续的'*' { j=1; while(j<=m) { if(s[i][j]=='*') { nx++; while(s[i][j]=='*') { cx[i][j]=nx;//离散化,将横向且连续(一个或以上)的'*'看成一个点并对其进行编号 j++; } } else j++; } } for(j=1;j<=m;j++)//在垂直方向上查找连续的'*' { i=1; while(i<=n) { if(s[i][j]=='*') { ny++; while(s[i][j]=='*')//离散化,将竖向且连续(一个或以上)的'*'看成一个点并对其进行编号 { cy[i][j]=ny; i++; } } else i++; } } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(s[i][j]=='*') { map[cx[i][j]][cy[i][j]]=1; } } } memset(match,-1,sizeof(match)); printf("%d\n",Hungry()); system("pause"); return 0; }
相关文章推荐
- POJ 2226 Muddy Fields(二分匹配【最大流】)
- POJ 3041 Asteroids(最大二分匹配)
- poj 3189 Steady Cow Assignment(多重匹配or二分最大流)
- POJ 2226 缩点建图+二分图最大匹配
- poj 1247 The Perfect Stall 裸的二分匹配,但可以用最大流来水一下
- Poj 2226 Muddy Fields【二分匹配】
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES
- 【最大流+Dinic+Edmonds_Karp+二分匹配】北大 poj 1698 Alice's Chance
- POJ 3216 二分匹配(想到就简单的题) floyed求最短路+匈牙利最大匹配
- POJ 1325 Machine Schedule (最大二分匹配)
- poj 2239 二分 最大匹配
- poj 2226 Muddy Fields 最大匹配
- poj The Perfect Stall 1274 最大二分匹配
- poj 1719最大二分匹配hungary算法
- POJ 3041 匈牙利算法 最小覆盖 最大二分匹配
- POJ 2239 二分最大匹配
- POJ 3020 Antenna Placement(最大二分匹配)
- poj 3020 二分最大匹配
- poj 1469 COURSES 最大二分匹配
- POJ 2226 Muddy Fields(二分匹配)