hdoj1045 Fire Net(二分图最大匹配)
题意:给出一个图,其中有 . 和 X 两种,. 为通路,X表示墙,在其中放炸弹,然后炸弹不能穿过墙,问你最多在图中可以放多少个炸弹?
这个题建图有点复杂orz。
建图,首先把每一行中的可以放一个炸弹的一块区域标记为同一个数字,数字不重复,然后列做相同的处理,即缩点!
缩点之后原图矩阵中每个点都对用一个行数字和一个列数字,然后按照这两个数字进行二分匹配,其相同值只取一个,得到的结果就是ans。
#include<iostream>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 10
using namespace std;
int n;
int cnt_row,cnt_col;
char map[maxn][maxn];
int line[maxn][maxn],row[maxn][maxn],col[maxn][maxn],match[maxn],used[maxn];
int dfs(int x){
for (int i=;i<cnt_col;i++){
if (line[x][i]== && !used[i]){
used[i]=;
if (match[i]==- || dfs(match[i])){
match[i]=x;
return ;
}
}
}
return ;
}
int main(){
while (cin >> n && n){
for (int i=;i<n;i++){
for (int j=;j<n;j++){
cin >> map[i][j];
}
}
memset(row,-,sizeof(row));
memset(col,-,sizeof(col));
cnt_row=,cnt_col=;
for (int i=;i<n;i++){
for (int j=;j<n;j++){
if (map[i][j]=='.' && row[i][j]==-){
for (int k=j;map[i][k]=='.' && k<n;k++) row[i][k]=cnt_row;
cnt_row++;
}
if (map[j][i]=='.' && col[j][i]==-){
for (int k=j;map[k][i]=='.' && k<n;k++) col[k][i]=cnt_col;
cnt_col++;
}
}
}
memset(line,,sizeof(line));
for (int i=;i<n;i++){
for (int j=;j<n;j++){
if (map[i][j]=='.' && row[i][j]!=- && col[i][j]!=-)
line[row[i][j]][col[i][j]]=;
}
}
int ans=;
memset(match,-,sizeof(match));
for (int i=;i<cnt_row;i++){
memset(used,,sizeof(used));
if (dfs(i)) ans++;
}
cout << ans << endl;
}
return ;
}
hdoj1045 Fire Net(二分图最大匹配)的更多相关文章
- HDU - 1045 Fire Net  (二分图最大匹配-匈牙利算法)
		
(点击此处查看原题) 匈牙利算法简介 个人认为这个算法是一种贪心+暴力的算法,对于二分图的两部X和Y,记x为X部一点,y为Y部一点,我们枚举X的每个点x,如果Y部存在匹配的点y并且y没有被其他的x匹配 ...
 - HDU1045 Fire Net —— 二分图最大匹配
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
 - HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]
		
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...
 - hdoj--1045<dfs&二分图最大匹配>(这里是dfs解法)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目描述: 在矩阵中放车,车可四面攻击,矩阵中有墙,可以防止攻击,给出墙的位置,输出最多可以放多 ...
 - 二分图最大匹配 hdoj 1045
		
题目:hdoj1045 题意:给出一个图.当中有 . 和 X 两种,. 为通路,X表示墙,在当中放炸弹,然后炸弹不能穿过墙.问你最多在图中能够放多少个炸弹? 分析:这道题目是在上海邀请赛的题目的数据简 ...
 - POJ 3041 Asteroids / UESTC 253 Asteroids(二分图最大匹配,最小点匹配)
		
POJ 3041 Asteroids / UESTC 253 Asteroids(二分图最大匹配,最小点匹配) Description Bessie wants to navigate her spa ...
 - HDU1045(KB10-A 二分图最大匹配)
		
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
 - POJ 2226二分图最大匹配
		
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图 ...
 - POJ2239 Selecting Courses(二分图最大匹配)
		
题目链接 N节课,每节课在一个星期中的某一节,求最多能选几节课 好吧,想了半天没想出来,最后看了题解是二分图最大匹配,好弱 建图: 每节课 与 时间有一条边 #include <iostream ...
 - poj 2239   二分图最大匹配,基础题
		
1.poj 2239 Selecting Courses 二分图最大匹配问题 2.总结:看到一个题解,直接用三维数组做的,很巧妙,很暴力.. 题意:N种课,给出时间,每种课在星期几的第几节课上 ...
 
随机推荐
- python创建独立虚拟工作环境方法
			
前言: python的组件非常之多,有时这个项目依赖m个组件,有时那个项目依赖n个组件,时间一长很容易导致系统python环境的臃肿不堪,由此便有了virtualenv.virtualenvwrapp ...
 - UI交互设计教程分享:提高界面交互体验的“葵花宝典”
			
本次分享的是在界面设计中最长实用也最容易被忽略的十个原则,就是尼尔森十大可用性设计原则,这是十分基础且重要的原则.原则是死的,如何正确的结合到实际运用中才是关键.接下来我会通过对每一个原则的理解和现 ...
 - 体育类App原型制作分享-Onefootball
			
Onefootball 是一款适合于足球迷的应用,提供全球 100 多项赛事的新闻.数据.比分和直播.原型中选择“喜欢的球队”这个界面中,用到了悬浮按钮,采用的是滚动区来放置需要滚动的球队列表,然后将 ...
 - PetaPoco与SQLite
			
PetaPoco与SQLite. 对于精简版本的ORM,PetaPoco确实短小精悍,想做个WPF的Demo,然后将PetaPoco与SQLite集成一起使用,简单易用,是不错的选择. ()==数据库 ...
 - "我们分手吧。"女的对男的说。 "为什么呢?亲爱的,你不要我了么?" "因为你幼稚。"女的坚定地语气回答道,然后转身准备走。 男的上前踩住女的影子,然后说...
			
1."我们分手吧."女的对男的说. "为什么呢?亲爱的,你不要我了么?" "因为你幼稚."女的坚定地语气回答道,然后转身准备走. 男的上前踩 ...
 - 2018.09.01 hdu4405 Aeroplane chess (期望dp)
			
传送门 期望dp简单题啊. 不过感觉题意不太对. 手过了一遍样例发现如果有捷径必须走. 这样的话就简单了啊. 设f[i]" role="presentation" sty ...
 - Linux下Git安装及配置
			
转载自:https://blog.csdn.net/u013256816/article/details/54743470:加了一些自己的注释. yum安装 这里采用的是CentOS系统,如果采用yu ...
 - *C语言的小技巧
			
计算数组长度 ,,,,}; int Length=sizeof(a)/sizeof(int); 交换a和b的值,不借用辅助变量 a=a+b; b=a-b; a=a-b; 将0-9的字符转化为整数 '; ...
 - 在mui中创建aJax来请求数据..并展示在页面上
			
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <m ...
 - EntityFramework 基本模式和Code-First的简单使用
			
1.Database-First Database First就是首先建立好数据库,或者存在现成的数据库也可以.然后在vs中添加ADO.Net实体数据模型,找到需要的数据库和表.它是以数据库设计为基 ...