blockhouses



题意 : 给你一张图上面" X " 代表墙 , " . " 代表空地 , 让你在空地上放置炮台 , 条件是 不能 让彼此的炮台 可以互相看见 ( 隔着墙就看不见了 ) , 问你最多可以放置 多少个炮台 .
题解 : 二话不说上去直接暴力搜索 , 给的图最大不超过 5 * 5 所以 就直接暴力 了 , 但是 八皇后那里以前写过一个 0ms 的代码 , 一会去看看 , 一段时间不看就忘了 , 一会附上优化代码 . 还有就是 这个将两个for循环写成一个for循环 真的特别简单 而且还不容易出错 ...
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std; //有点类似于 八皇后问题
char a[][]; //图 不大 可以暴力一点
int visited[][],maxn,n1,result;
bool check(int x,int y,int n)
{
for(int i=x-;i>=&&a[y][i]!='X';i--)
if(a[y][i]=='@')
return false;
for(int i=x+;i<n&&a[y][i]!='X';i++)
if(a[y][i]=='@')
return false;
for(int i=y-;i>=&&a[i][x]!='X';i--)
if(a[i][x]=='@')
return false;
for(int i=y+;i<n&&a[i][x]!='X';i++)
if(a[i][x]=='@')
return false;
return true;
}
void DFS(int x,int n)
{
for(int i=x;i<n1;i++)
{
int i1=i/n,j1=i%n;
if(a[i1][j1]!='X'&&!visited[i1][j1]&&check(j1,i1,n))
{
visited[i1][j1]=;
a[i1][j1]='@';
maxn++;
result=maxn>result?maxn:result;
DFS((j1+)*(i1+),n);
maxn--;
a[i1][j1]='.';
visited[i1][j1]=;
}
}
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
n1=n*n;
for(int i=;i<n1;i++)
{
int i1=i/n,j1=i%n;
scanf(" %c",&a[i1][j1]);
}
result=maxn=;
memset(visited,,sizeof(visited));
DFS(,n);
printf("%d\n",result);
}
return ;
}
blockhouses的更多相关文章
- ACM blockhouses
blockhouses 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straigh ...
- NYOJ 587 blockhouses 【DFS】
blockhouses 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 Suppose that we have a square city with straigh ...
- [ACM_图论] Fire Net (ZOJ 1002 带障碍棋盘布炮,互不攻击最大数量)
Suppose that we have a square city with straight streets. A map of a city is a square board with n ...
- hdu 1045:Fire Net(DFS经典题)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU1045 Fire Net(DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1045 Fire Net(最小覆盖点+构图(缩点))
http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS Memory Limit:32768KB ...
- Fire Net
Fire Net Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Subm ...
- HDU-1045 Fire Net
http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) Me ...
- hdoj 1045 Fire Net
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
随机推荐
- Linux:使用root踢掉其他用户
首先使用w命令查看所有在线用户: 执行命令: pkill -kill -t tty3 再用w命令查看是否已经强制踢掉: TTY 是终端的意思 TTY :0 表示root用户登陆图形化界面的终 ...
- HP下kafka的实践
kafka 简介 Kafka 是一种高吞吐量的分布式发布订阅消息系统 kafka角色必知 producer:生产者. consumer:消费者. topic: 消息以topic为类别记录,Kafka将 ...
- 利用postman进行接口测试并发送带cookie请求的方法
做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...
- Python基础之函数参数与返回值进阶
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...
- HDU 5178 pairs(双指针)
HDU 5178 pairs(双指针) Hdu 5178 解法:因为要求的是绝对值小于等于k,因此数字的序号关系并不重要,那么排序后使用双指针即可解决这个问题. #include<queue&g ...
- scrapy——中间件UserAgent代理
pip install fake-useragent 使用说明:from fake_useragent import UserAgent# 实例化一个UserAgent对象ua = UserAgent ...
- [bzoj1577][Usaco2009 Feb]庙会捷运Fair Shuttle_贪心_线段树
庙会捷运 Fair Shuttle bzoj-1577 Usaco-2009 Feb 题目大意:有一辆公交车从1走到n.有m群奶牛从$S_i$到$E_i$,第i群奶牛有$W_i$只.车有一个容量c.问 ...
- [poj2975]Nim_博弈论
Nim poj-2975 题目大意:给定n堆石子,问:多少堆石子满足操作之后先手必胜. 注释:$1\le n\le 10^3$. 想法: 我们设M=sg(x1)^sg(x2)^...^sg(xn).其 ...
- 16、Java并发性和多线程-死锁
以下内容转自http://ifeve.com/deadlock/: 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁.死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候. 例如, ...
- 1.4-动态路由协议OSPF④
多区域的OSPF: 划分多区域的主要目的: 1.减少每个区域中的路由条目,进而减少每个路由器的内存中的路由,及其内存消耗,提高转发效率. 2.因为每一个OSPF区域对应在一个OSPF LSDB,配合在 ...