题意:

给出一张图,图中'X'表示wall,'.'表示空地,可以放置blockhouse同一条直线上只能有一个blockhouse,除非有wall

隔开,问在给出的图中最多能放置多少个blockhous

分析:

把原始图分别按行和列缩点  
建图:横竖分区。先看每一列,同一列相连的空地同时看成一个点,显然这样的区域不能够同时放两个点。这些

点作为二分图的X部。同理在对所有的行用相同的方法缩点,作为Y部。  
  连边的条件是两个区域有相交部分(即'.'的地方)。最后求最大匹配就是答案。

#include <bits/stdc++.h>
using namespace std;
int n;
struct node
{
int a = , b = ;
};
node id[][];
char mp[][];
bool link[][];
bool vis[];
int use[];
int hcnt,rcnt; void dfsh(int x,int y){
if(y <= n && mp[x][y] == '.'){
id[x][y].a = hcnt;
dfsh(x,y+);
}
} void dfsr(int x,int y){
if(x <= n && mp[x][y] == '.'){
id[x][y].b = rcnt;
dfsr(x+,y);
}
} int find(int x)
{
for (int s = ; s < rcnt; s++) {
if (link[x][s] && !vis[s]) {
vis[s] = ;
if (use[s] == || find(use[s])) {
use[s] = x;
return ;
}
}
}
return ;
} int main(int argc, char const *argv[])
{
while(cin >> n && n){
for(int i = ;i <= n ;i ++){
cin >> mp[i] + ;
} memset(id,,sizeof id);
memset(link,,sizeof link);
memset(use,,sizeof use);
hcnt = rcnt = ;
for(int i = ;i <= n;i ++){
for(int j = ;j <= n ;j ++){
if(mp[i][j] == 'X'){
continue;
}
if(id[i][j].a == ){
dfsh(i,j);
hcnt ++;
}
if(id[i][j].b == ){
dfsr(i,j);
rcnt ++;
}
link[id[i][j].a][id[i][j].b] = ;
}
}
int sum = ;
for(int i = ;i < hcnt;i ++){
memset(vis,,sizeof vis);
if(find(i)) sum ++;
}
printf("%d\n",sum );
} return ;
}

最新文章

  1. [网站性能1]对.net系统架构改造的一点经验和教训
  2. 解决ORA-14450:试图访问已经在使用的事务处理临时表
  3. boot from volume
  4. Git从零教你入门(4):Git服务之 gogs部署安装
  5. oracle-day1
  6. [LintCode] Interleaving Positive and Negative Numbers
  7. 161104、NoSQL数据库:key/value型之levelDB介绍及java实现
  8. MySQL 5.6.26源码安装
  9. Vim的tagbar插件
  10. Android 进程保活招式大全
  11. mysql导出csv/excel文件的几种方法,mysql的load导入csv数据
  12. 获取nginx ip地理信息
  13. [转]spring mvc注解方式实现向导式跳转页面
  14. js编码、解码
  15. VMWare虚拟机启动报错物理内存不足
  16. Linux supervisord配置使用
  17. Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口
  18. Html Link 标签
  19. MySQL存储过程整理
  20. spark快速开发之scala基础之2控制流程

热门文章

  1. [Jenkins]Job中如何传递自定义变量
  2. 17.Python print()函数高级用法
  3. Apicloud_(项目)网上书城02_后端数据获取
  4. JS框架_(Bootstrap.js)实现简单的轮播图
  5. jquery绝对路径
  6. MVC1:.Net MVC Cotroller向View传值
  7. ControlTemplate in WPF —— Shared in all file
  8. Thymeleaf 页面表达式基础
  9. jqGrid整理笔记
  10. 阶段3 3.SpringMVC&#183;_01.SpringMVC概述及入门案例_06.入门案例的流程总结