题意 : 给你一张图上面" 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的更多相关文章

  1. ACM blockhouses

    blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 Suppose that we have a square city with straigh ...

  2. NYOJ 587 blockhouses 【DFS】

    blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 Suppose that we have a square city with straigh ...

  3. [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 ...

  4. hdu 1045:Fire Net(DFS经典题)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. HDU1045 Fire Net(DFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)  ...

  6. hdu 1045 Fire Net(最小覆盖点+构图(缩点))

    http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS     Memory Limit:32768KB   ...

  7. Fire Net

    Fire Net Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  8. HDU-1045 Fire Net

    http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)    Me ...

  9. hdoj 1045 Fire Net

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

随机推荐

  1. 微信小程序官方指南手册,教你如何使用微信小程序!

    2017年1月9日,小程序如约而至.程序员们都讨论的热火朝天,但是真正使用过微信小程序的又有几个呢?下面今天我们给大家介绍下微信小程序到底应该如何使用? 首先,你的微信必须是最新版本的,微信官方是从要 ...

  2. Linux 复习二

    第二章 一.Linux文件系统 1.基本概念 Linux文件系统为单根的树状结构,根为“/”,文件名大小写敏感,除了“/”都是可用字符,文件名以“.”开始的为隐藏文件. 2.常用文件夹 bin:可执行 ...

  3. stm32实现iap远程固件更新

    前提 想来做iap升级了,应该不是什么新手. 下面的程序需要用到一些简单的功能 串口收发数据开关总中断虽然本文标题是实现远程固件更新,但是具体远程方案本文不做详细说明,重点在于介绍mcu接收到新的固件 ...

  4. 洛谷 2471 BZOJ 1067 [SCOI2007]降雨量

    [题解] 用线段树维护区间最大值(因为没有修改,St表也可以),然后由于x,y可能是降雨量未知的年份,需要进行分类讨论. #include<cstdio> #include<algo ...

  5. mappingLocations、mappingDirectoryLocations与mappingJarLocations 区别 (转)

    mappingLocations.mappingDirectoryLocations与mappingJarLocations 区别 由于spring对hibernate配置文件hibernate.cf ...

  6. android获取年月日时分秒

    Calendar calendar=Calendar.getInstance(); //获取当前时间,作为图标的名字 String year=calendar.get(Calendar.YEAR)+& ...

  7. [bzoj1833][ZJOI2010]数字计数(数位DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1833 分析:简单的数位DP f[i][j][k]表示在i位数.最高位j的所有数字中k的 ...

  8. python实现汉诺塔算法

    汉诺塔 算法分析 1.步骤1:如果是一个盘子,直接将a柱子上的盘子从a移动到c 否则 2.步骤2:先将A柱子上的n-1个盘子借助C移动到B(图1) 已知函数形参为hanoi(n,a,b,c),这里调用 ...

  9. - > 贪心基础入门讲解四——独木舟问题

    n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 分析: 一个显然的策略 ...

  10. HDU 4005 The war(双连通好题)

    HDU 4005 The war pid=4005" target="_blank" style="">题目链接 题意:给一个连通的无向图.每条 ...