这题的关键在于建图,这题当中,因为要求木板覆盖泥坑,但又不能覆盖草,所以不能简单的行和列对应建图,我们要对行中泥坑进行编号,连一起的编同样的号,同样的对列中连一起的泥坑进行编号,如果行列编号的一块泥坑连一起,便为这两个编号建立边,这样对其进行匈牙利算法求最大匹配,就是最小覆盖点,就是答案。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define maxn 505
#define mem(a) memset(a, 0, sizeof(a))
using namespace std;char maps[maxn][maxn];
bool map[maxn][maxn], vis[maxn];
int lk[maxn], numw[maxn][maxn], n, m, w, h;bool dfs(int a)
{int i;for(i = 0;i <= h;i++){if(!vis[i]&&map[a][i]){vis[i] = 1;if(lk[i] == -1||dfs(lk[i])){lk[i] = a;return true;}}}return false;
}int res()
{int i;int ress = 0;memset(lk, -1, sizeof(lk));for(i = 0;i <= w;i++){mem(vis);if(dfs(i))ress++;}return ress;
}int main(int argc, char *argv[])
{int eagenum, i, j, ans;while(scanf("%d%d%*c", &n, &m) != EOF){mem(map);mem(maps);w = -1;h = -1;for(i = 0;i < n;i++){for(j = 0;j < m;j++){scanf("%c", &maps[i][j]);}scanf("%*c");}for(i = 0;i < n;i++){for(j = 0;j < m;j++){if(j == 0&&maps[i][j] == '*')numw[i][j] = ++w;else if(maps[i][j] == '*'&&maps[i][j - 1] == '*')numw[i][j] = w;else if(maps[i][j] == '*'&&maps[i][j - 1] != '*')numw[i][j] = ++w;}}for(i = 0;i < m;i++){for(j = 0;j < n;j++){if(j == 0&&maps[j][i] == '*')map[numw[j][i]][++h] = 1;else if(maps[j][i] == '*'&&maps[j - 1][i] == '*')map[numw[j][i]][h] = 1;else if(maps[j][i] == '*'&&maps[j - 1][i] != '*')map[numw[j][i]][++h] = 1;}}ans = res();printf("%d\n", ans);}return 0;
}

POJ2226 Muddy Fields 二分图求最小覆盖点相关推荐

  1. POJ2226 Muddy Fields

    这道题目算是二分图中比较难的一道,明明知道是二分图问题,应该用匈牙利算法解决,可是看了半天也没发现二分图的特点在哪里,后来看了高人的博客才明白要把二维图抽象出来,将每一道x方向相连的"*&q ...

  2. poj2226 Muddy Fields 填充棒子(二分匹配)

    参考博客:https://blog.csdn.net/liujc_/article/details/51287019 参考博客:https://blog.csdn.net/acdreamers/art ...

  3. POJ-2226 Muddy Fields 最小点集覆盖

    题目链接:http://poj.org/problem?id=2226 这题是POJ 3041的升级版本,很有意思,要求木板不能盖在草地上.那么这里我们可以把每行一连续'*'的看做行,把每列连续的'* ...

  4. poj Muddy Fields

    Muddy Fields 原题去我创的专题里找.在文件夹首页. 题目: 给出N*M矩阵.当中*表示泥土,.表示小草.要你用最少的木板把泥土覆盖. 木板长度不限,可是仅仅能水平和竖直. 行列式二分匹配配 ...

  5. 洛谷:P6062 [USACO05JAN]Muddy Fields G

    题目链接:P6062 [USACO05JAN]Muddy Fields G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 此题重点在二分图的建图. 考虑放置木板的决策,由于可以重复 ...

  6. 51nod Muddy Fields 2856

    题意: 2856 Muddy Fields 1.0 秒 262,144.0 KB 80 分 5级题 在一个n*m的草地上有一些泥坑,现在可以用宽度为1,长度任意的长木板去覆盖泥坑,但是木板不能覆盖草地 ...

  7. poj 2226 Muddy Fields 最小顶点覆盖

    题目链接:http://poj.org/problem?id=2226 这道题跟上一道很相似不同之处在于这里不是整行或者整列的删,而是连续的几个可以一起删,不连的不能删,这就要对原图进行处理,对原有的 ...

  8. 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )

    题干: Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= R <= 5 ...

  9. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...

最新文章

  1. Flex中你最应该知道的10点
  2. 盘点一下全网最有趣的代码注释
  3. 阿里研究员谷朴:API 设计最佳实践的思考
  4. c#中Excel数据的导入、导出
  5. 操作系统——实验叁——主存空间的分配与回收
  6. sql 中 ALTER 和 UPDATE 的区别
  7. 《机器学习实战》学习总结(二)决策树算法原理
  8. Oracle 创建表空间借鉴 保留,占版权留言告知
  9. “软件工程造价师”和“软件造价评估师”有什么区别?
  10. python cmd窗口 title_解决python在windows上运行弹出cmd窗口(dos窗口)
  11. usb不能识别的解决方案
  12. veil-Evasion免杀使用
  13. 【洛谷】P1427 小鱼的数字游戏
  14. 【经典箴言 || 人生感悟 】
  15. Unity3d通用工具类之解压缩文件
  16. 字符串输入的2种常用方法详解
  17. Android论坛大全
  18. kibana 更新 索引模式_Kibana探索数据(Discover)详解
  19. 什么是SOA(面向服务的架构)?
  20. CNSS测量与数据测量第二周作业

热门文章

  1. 带你了解前端之HTML超文本标记语言
  2. 微软的复兴之道(1)——追忆往昔,起大早赶晚集
  3. CPU空闲时在忙什么
  4. 今日头条2018校园招聘后端开发工程师(第二批)编程题 (Java版)
  5. linux 下的几个配置文件-开机启动,mount硬盘,
  6. Docker镜像仓库(包括阿里云,harbor,和本地镜像的导出和导入)
  7. docker geovis_GitHub - ThinkBlue1991/cronjob-operator
  8. 尤里复仇退出界面_win7系统下红警2尤里的复仇如何改成窗口化运行
  9. Google BBR拥塞控制算法背后的数学解释
  10. 【思考】百度all in人工智能,是要得道成仙还是走火入魔?