题目链接

题目大意:

假设我们有一个正方形的城市,并且街道是直的。城市的地图是n行n列,每一个单元代表一个街道或者一块墙。

碉堡是一个小城堡,有四个开放的射击口。四个方向是面向北、东、南和西。在每一个口子上有一架机关枪。

假设子弹能够穿过任何距离,并且摧毁路上的碉堡。另一方面,子弹不能穿越墙。

我们的目标是在城市里设置足够多的碉堡,并且任何两个碉堡都不会互相摧毁。正确的配置是没有两个碉堡在相同的水平行或者垂直列上,除非碉堡之间有墙把它们分开。在这个问题中,我们将使用小的方形城市(最多4*4),它包含了墙,并且子弹不能穿越。

接下来的图片显示五张城市地图,第1张图片是空的布局,第2张和第3张图片显示了合法的配置,第4和第5张图片显示了非法的配置。对于这样的地形来说,碉堡的最大数是5;第2张图片显示了这个配置方案,但还有其他的配置方案。

你的任务是写一个程序,在给出的地图描述下,计算城市中可以合法放置的碉堡的最大数。

输入文件包含一个或者多个地图描述,0作为文件的结束。每个地图描述首行是城市的尺寸n,n最大为4。接下来的n行描述了地图的每一行,符号“."代表开放区域,大写的X代表墙。输入文件中没有空格。

每一个测试用例,最后输出一行为合法放置碉堡的最大数。

Sample input:

4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0

Sample output:

5
1
5
2
4
#include <bits/stdc++.h>
using namespace std; int n,ans;
char mpa[][];
bool vis[][]; bool check(int x,int y){ //四个方向判断是否与之前防止的碉堡冲突
for(int i=x+;i<=n;i++){ if(mpa[i][y]=='O')return false; if(mpa[i][y]=='X')break; }
for(int i=x-;i>=;i--){ if(mpa[i][y]=='O')return false; if(mpa[i][y]=='X')break; }
for(int j=y+;j<=n;j++){ if(mpa[x][j]=='O')return false; if(mpa[x][j]=='X')break; }
for(int j=y-;j>=;j--){ if(mpa[x][j]=='O')return false; if(mpa[x][j]=='X')break; }
return true;
}
void dfs(int x,int y,int num){
if(ans<num)ans=num;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(!vis[i][j]&&check(i,j)&&mpa[i][j]=='.'){
vis[i][j]=;
mpa[i][j]='O';
dfs(i,j,num+); //选择放与不放
vis[i][j]=;
mpa[i][j]='.';
}
}
}
}
int main(){
while(~scanf("%d",&n),n){
getchar();
for(int i=;i<=n;i++){
scanf("%s",mpa[i]+);
}
memset(vis,false,sizeof(vis));
ans=;
dfs(,,);
printf("%d\n",ans);
}
}

 
												

最新文章

  1. Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次
  2. React Ntive 学习手记
  3. 巧妙的重载魔术方法__call()
  4. [Effective JavaScript 笔记]第30条:理解prototype、getPrototypeOf和__ptoto__之间的不同
  5. MVC与WebForm的一些区别
  6. 导出Exexcl类
  7. php rsa 加密、解密、签名、验签
  8. css3新特性---(border,Background部分)
  9. 分布式服务框架Dubbo
  10. tomcat 启动窗口乱码
  11. Android为TV端助力 转载:android自定义view实战(温度控制表)!
  12. 牛客练习赛38 D 题 出题人的手环 (离散化+树状数组求逆序对+前缀和)
  13. Python Redis 管道
  14. HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用
  15. [JLOI2015]装备购买 (高斯消元)
  16. SharePoint 2010 使用Install-SPSolution部署wsp包状态一直是”正在部署”
  17. Docker 入门指南——资源工具篇
  18. delphi中Application.MessageBox函数用法详解
  19. Java -- 给定一个int数组,拼接出最大数值
  20. 值得推荐的C/C++开源框架和库

热门文章

  1. Java代码自动部署
  2. Windows下安装Confluence并破解汉化
  3. java.lang.NumberFormatException 错误及解决办法
  4. 后RCNN时代的物体检测及实例分割进展
  5. VUE开发请求本地数据的配置,旧版本dev-server.js,新版本webpack.dev.conf.js
  6. cf965C 二分+推方程
  7. Centos7上配置网络和本地yum方法
  8. PHP中self和this的用法区别
  9. 如何下载kubenetes最新的rpm包?
  10. 一脸懵逼学习MapReduce的原理和编程(Map局部处理,Reduce汇总)和MapReduce几种运行方式