HDU 1045 - Fire Net (最大独立集)
题意:给你一个正方形棋盘。每个棋子可以直线攻击,除非隔着石头。现在要求所有棋子都不互相攻击,问最多可以放多少个棋子。
这个题可以用搜索来做。每个棋子考虑放与不放两种情况,然后再判断是否能互相攻击来剪枝。最后取可以放置的最大值。
这里我转化成求最大独立集来做。
首先将每个空地编号,对于每个空地,与该位置可以攻击到的空地连边。找最多的空地使得不互相攻击,即求该图的最大独立集。与搜索做法基本一致,但是说法略有不同。
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<vector>
using namespace std;
][];
][];
][];
int n,cn,ans;
];
void init()
{
memset(gl,,sizeof(gl));
cn=;
; i<n; ++i)
; j<n; ++j)
if(grid[i][j]=='.')
g[i][j]=++cn;
;
; i<n; ++i)
; j<n; ++j)
if(grid[i][j]=='.')
{
int &now=g[i][j];
; k<n&&g[i][k]; ++k)
gl[now][g[i][k]]=true;
; k>=&&g[i][k]; --k)
gl[now][g[i][k]]=true;
; k<n&&g[k][j]; ++k)
gl[now][g[k][j]]=true;
; k>=&&g[k][j]; --k)
gl[now][g[k][j]]=true;
}
ans=;
memset(col,,sizeof(col));
}
void dfs(int d,int res)
{
if(d>cn) ans=max(ans,res);
else
{
bool ok=true;
; i<=cn; ++i)
if(gl[d][i]&&col[i]) ok=false;
if(ok)
{
col[d]=true;
dfs(d+,res+);
col[d]=false;
}
dfs(d+,res);
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
; i<n; ++i)
scanf("%s",grid[i]);
init();
dfs(,);
printf("%d\n",ans);
}
;
}
HDU 1045 - Fire Net (最大独立集)的更多相关文章
- HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...
- hdu 1045 Fire Net(最小覆盖点+构图(缩点))
http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS Memory Limit:32768KB ...
- HDU 1045(Fire Net)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...
- HDU 1045 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,跟8皇后问题很相似)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045——Fire Net——————【最大匹配、构图、邻接矩阵做法】
Fire Net Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- HDU 1045 Fire Net 状压暴力
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045 Fire Net 二分图建图
HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...
- HDU - 1045 Fire Net(二分匹配)
Description Suppose that we have a square city with straight streets. A map of a city is a square bo ...
随机推荐
- COM组件(ATL篇)
目录 第1章创建进程内组件 1 1.1 目标 1 1.2 创建项目 3 1.2.1 VC++6.0 3 1.2.2 VC++2010 5 1.3 增加COM类 6 ...
- (转)Android APK反编译详解
转载地址:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到 ...
- jmeter 构建一个LDAP测试计划
添加用户 第一步你想做的每一个JMeter测试计划是添加一个线程组元素. 线程组告诉JMeter的用户数量你想模拟,用户应该发送的次数 请求,他们应该发送的请求的数量. 继续添加ThreadGroup ...
- python 练习 13
#!/usr/bin/python # -*- coding: UTF-8 -*- l = [] for i in range(3): x = int(raw_input('integer:\n')) ...
- HTTP协议中PUT和POST使用区别 【转载】
有的观点认为,应该用 POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和 POST中任何一个来做创建或者更 ...
- webBrowser1执行函数
IHTMLWindow2 Win = (IHTMLWindow2)webBrowser1.Document.Window.DomWindow;string s = "alert('x');& ...
- jQuery制作瀑布流(转)
“瀑布流布局”随着pinterest网的流行而出名,现在国内使用这种风格布局的网站也越来越多,比如说Mark之,蘑菇街,点点网,哇哦等等.我第一次听到这个布局名称是来自于“乔花写的<瀑布流布局浅 ...
- JavaScript基础---作用域,匿名函数和闭包【转】
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...
- Matcher类:(转)
Matcher类: 使用Matcher类,最重要的一个概念必须清楚:组(Group),在正则表达式中 ()定义了一个组,由于一个正则表达式可以包含很多的组,所以下面先说说怎么划分组的, 以及这 ...
- log4j的简单应用(转载)
当程序有错误时,我们就需要找出错误的地方并进行验证,怎样才能准确快速的找到出错的地方呢,那就是在程序运行时在控制台上输出相关的信息,从而可以判断程序的运行顺序以及出错的位置.以前总是习惯使用Syste ...