题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654

将每一行的包含空地的区域编号

再将每一列的包含空地的区域编号

然后把每一个横向块看作二部图中顶点的集合x中的顶点

竖向块看作集合y中的顶点,若两个块有公共的空地,则将他们连边

然后就转化为二分图最大匹配问题

代码:

 #include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
using namespace std; #define maxn 51
int xn,yn;
int x[maxn*maxn],y[maxn*maxn];
int xs[maxn][maxn],ys[maxn][maxn];
int m,n;
int g[maxn*maxn][maxn*maxn];
int vis[maxn*maxn];
char map[maxn][maxn];
int ans;
bool path(int u)
{ for(int v=;v<=yn;v++)
{
if(g[u][v] && vis[v]==)
{ vis[v]=;
if(y[v]== || path(y[v]))
{
x[u]=v;
y[v]=u;
return ;
}
}
}
return ;
}void MaxMatch()
{
ans=;
memset(x,,sizeof(x));
memset(y,,sizeof(y));
for(int i=;i<=xn;i++)
if(!x[i])
{
memset(vis,,sizeof(vis));
if(path(i))
ans++; }
printf("%d\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
int iCase=;
while(t--)
{
printf("Case :%d\n",++iCase); scanf("%d%d",&m,&n);
memset(xs,,sizeof(xs));
memset(ys,,sizeof(ys)); for(int i=;i<m;i++)
scanf("%s",map[i]); int num=;
bool flag;
for(int i=;i<m;i++)//对水平方向的块进行编号
{
flag=;
for(int j=;j<n;j++)
{
if(map[i][j]=='o')
{
if(flag==) num++;
xs[i][j]=num; flag=;
}
else if(map[i][j]=='#') flag=;
}
}
xn=num;
num=; for(int j=;j<n;j++)//对垂直方向的块进行编号
{
flag=;
for(int i=;i<m;i++)
{
if(map[i][j]=='o')
{
if(flag==) num++;
ys[i][j]=num;flag=;
}
else if(map[i][j]=='#') flag=;
}
} yn=num; memset(g,,sizeof(g)); for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
if(xs[i][j]) g[xs[i][j]][ys[i][j]]=;
}
}
MaxMatch(); }
return ;
}

zoj1654 Place the Robots 二分图最大匹配的更多相关文章

  1. ZOJ1654 Place the Robots(二分图最大匹配)

    最大匹配也叫最大边独立集,就是无向图中能取出两两不相邻的边的最大集合. 二分图最大匹配可以用最大流来解. 如果题目没有墙,那就是一道经典的二分图最大匹配问题: 把地图上的行和列分别作为点的X部和Y部, ...

  2. POJ 2226二分图最大匹配

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图 ...

  3. POJ2239 Selecting Courses(二分图最大匹配)

    题目链接 N节课,每节课在一个星期中的某一节,求最多能选几节课 好吧,想了半天没想出来,最后看了题解是二分图最大匹配,好弱 建图: 每节课 与 时间有一条边 #include <iostream ...

  4. poj 2239 二分图最大匹配,基础题

    1.poj 2239   Selecting Courses   二分图最大匹配问题 2.总结:看到一个题解,直接用三维数组做的,很巧妙,很暴力.. 题意:N种课,给出时间,每种课在星期几的第几节课上 ...

  5. UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法

    二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...

  6. 二分图最大匹配的K&#246;nig定理及其证明

     二分图最大匹配的K?nig定理及其证明 本文将是这一系列里最短的一篇,因为我只打算把K?nig定理证了,其它的废话一概没有.    以下五个问题我可能会在以后的文章里说,如果你现在很想知道的话,网上 ...

  7. POJ3057 Evacuation(二分图最大匹配)

    人作X部:把门按时间拆点,作Y部:如果某人能在某个时间到达某门则连边.就是个二分图最大匹配. 时间可以二分枚举,或者直接从1枚举时间然后加新边在原来的基础上进行增广. 谨记:时间是个不可忽视的维度. ...

  8. HDU:过山车(二分图最大匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2063 题意:有m个男,n个女,和 k 条边,求有多少对男女可以搭配. 思路:裸的二分图最大匹配,匈牙利算法. 枚 ...

  9. UOJ #78 二分图最大匹配

    #78. 二分图最大匹配 从前一个和谐的班级,有 nl 个是男生,有 nr 个是女生.编号分别为 1,…,nl 和 1,…,nr. 有若干个这样的条件:第 v 个男生和第 u 个女生愿意结为配偶. 请 ...

随机推荐

  1. shell学习指南-阅读笔记

    shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...

  2. Java位向量的实现原理与巧妙应用

    Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...

  3. 2017年要学习的JavaScript的顶级框架和主题

    JavaScript的流行促进了一个非常活跃的由相关技术,框架和库组成的生态圈的发展.整个生态圈的多样性和活跃性越来越强,这让许多人变得越来越困惑. 你应该了解些什么技术呢?   我们应该将时间花费在 ...

  4. WPF之路四:窗体自适应

    下面我来举个例子说明如何用Grid或DockPanel来实现自适应窗体. 让我们新建一个WPF工程,完成后我们打开对应的XAML文件,可以看到VS已经自动添加了<Grid></Gri ...

  5. es 6点滴记录

    关于babel和webpack的使用: Babel 所做的只是帮你把'ES6 模块化语法'转化为'CommonJS 模块化语法',其中的require exports 等是 CommonJS 在具体实 ...

  6. K近邻 Python实现 机器学习实战(Machine Learning in Action)

    算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

  7. JavaScript之作用域与闭包总结

    博主最开始接触程序是C语言,C++,后来是java,现在是php,无论哪一种语言与javascript在机制上都还是有比较大的区别. 下面总结一下用面向对象的思想写javascript需要区分的要点: ...

  8. asp.net core源码飘香:Configuration组件

    简介: 这是一个基础组件,是一个统一的配置模型,配置可以来源于配置文件(json文件,xml文件,ini文件),内存对象,命令行参数,系统的环境变量又或者是你自己扩展的配置源,该组件将各个配置源的数据 ...

  9. 使用Microsoft SQL Server Migration Assistant for Oracle迁移数据库

    前言:使用Microsoft SQL Server Migration Assistant for Oracle迁移Oracle数据库到SqlServer数据库. 准备:Oracle11g.SqlSe ...

  10. web 项目中a标签传值(中文)到后台的乱码问题

    web 项目中a标签传值(中文)到后台的乱码问题 jsp页面中的a标签: .............. <c:forEach items="${sellerList }" v ...