[ZOJ 1002] Fire Net (简单地图搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002
题目大意:
给你一个n*n的地图,地图上的空白部分可以放棋子,也有墙,问最多能放多少棋子使得棋子两两不会袭击?
棋子袭击当且仅当处在同一行或者同一列上并且中间没有墙的阻隔。
真是好久没写过搜索题了。。这道题都写了这么久!!
直接写dfs(x,y,now) 代表我现在站在x点,y点上,那么就只能产生两种状态,放棋子或者不放棋子。
然后写一个C(x,y)代表当前点能否放置棋子。
什么情况下可以放置棋子呢?
因为我们是从左上角到右下角放的嘛,所以说只需要看左边和上边有没有棋子了。
代码:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <vector>
#include <map>
#include <set>
#include <iterator>
#include <functional>
#include <cmath>
#include <numeric>
using namespace std; typedef long long LL; int n;
char mp[][];
int maxn = ; bool C(int x,int y){
bool hang = true,lie = true;
for(int i=x-;i>=;i--){
if( mp[i][y]=='@' ) {
hang = false;
break;
}
if( mp[i][y]=='X' ){
hang = true;
break;
}
}
for(int j=y-;j>=;j--){
if( mp[x][j]=='@' ) {
lie = false;
break;
}
if( mp[x][j]=='X' ){
lie = true;
break;
}
}
return hang&&lie;
} void dfs(int x,int y,int now){
// printf("x=%d y=%d now=%d\n",x,y,now);
if( x==n&&y==n ){
if( mp[x][y]=='.' && C(x,y) ) now = now+;
maxn = max(maxn,now);
return;
}
if( mp[x][y]=='.' && C(x,y) ){
mp[x][y] = '@';
if(y+<=n) dfs(x,y+,now+);
else if(x+<=n) dfs(x+,,now+);
mp[x][y] = '.';
}
if(y+<=n) dfs(x,y+,now);
else if(x+<=n) dfs(x+,,now);
} int main(){
// freopen("output.txt","w",stdout);
while(scanf("%d",&n)!=EOF&&n){
if( n== ) break;
maxn = ;
for(int i=;i<=n;i++){
scanf("%s",mp[i]+);
}
dfs(,,);
printf("%d\n",maxn);
}
return ;
}
[ZOJ 1002] Fire Net (简单地图搜索)的更多相关文章
- zoj 1002 Fire Net (二分匹配)
Fire Net Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose that we have a square city with s ...
- ZOJ 1002 Fire Net(dfs)
嗯... 题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364501 这道题是想出来则是一道很简单的dfs: 将一 ...
- ZOJ 1002 Fire Net
题目大意:有一个4*4的城市,其中一些格子有墙(X表示墙),在剩余的区域放置碉堡.子弹不能穿透墙壁.问最多可以放置几个碉堡,保证它们不会相互误伤. 解法:从左上的顶点开始遍历,如果这个点不是墙,做深度 ...
- zoj 1002 Fire Net 碉堡的最大数量【DFS】
题目链接 题目大意: 假设我们有一个正方形的城市,并且街道是直的.城市的地图是n行n列,每一个单元代表一个街道或者一块墙. 碉堡是一个小城堡,有四个开放的射击口.四个方向是面向北.东.南和西.在每一个 ...
- DFS ZOJ 1002/HDOJ 1045 Fire Net
题目传送门 /* 题意:在一个矩阵里放炮台,满足行列最多只有一个炮台,除非有墙(X)相隔,问最多能放多少个炮台 搜索(DFS):数据小,4 * 4可以用DFS,从(0,0)开始出发,往(n-1,n-1 ...
- Fire Net(深度优先搜索)
ZOJ Problem Set - 1002 Fire Net Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose that we ha ...
- 微信公众号开发《三》微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索
本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与 ...
- 微信公众号开发《三》微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索
本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与 ...
- [ZJU 1002] Fire Net
ZOJ Problem Set - 1002 Fire Net Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose that we ha ...
随机推荐
- MyEclipse配置Resin启动报错问题
错误信息如下: com.caucho.config.ConfigException: -server 'default' is an unknown server in the configurati ...
- python psutil 模块
一.获取系统性能信息 1 .CPU信息 User time,执行用户进程的时间百分比 System time,执行内核进程和中断的百分比 Wait IO,由于IO等待而使CPU处于idle(空闲)状态 ...
- 【shell】case语句
case只能判断一种条件关系,而if能判断多种条件关系 #!/bin/bash read -p "please input your choice (high/middle/low):&qu ...
- IntelliJ IDEA手动配置连接MySQL数据库
先从菜单View→Tool Windows→Database打开数据库工具窗口,如下图所示: 点击Database工具窗口左上角添加按钮"+",选择数据库类型,这里以MySQL为例 ...
- MySQL时间戳和时间格式转换函数
MySQL时间戳和时间格式转换函数:unix_timestamp and from_unixtime unix_timestamp将时间转化成时间戳格式.from_unixtime将时间戳转化成时间格 ...
- 如何把SQLServer数据库从高版本降级到低版本?
http://blog.csdn.net/dba_huangzj/article/details/7952403 由于目前还广泛使用着SQLServer2000,很多公司又想使用新的SQLServer ...
- eclipse导入html、js、xml报错的问题
今天重新安装eclipse,在导入部分html.js.xml文件,报错,解决办法如下: eclipse->window->preferences->Team,点击validation ...
- Platform Invoke
PInvoke 允许managed code 来调用在DLL中实施的unmanged function. Platform invoke relies on metadata to locate ex ...
- PLSQL_Oracle Logon Trigger的建立
20150609 Created By BaoXinjian
- js对象继承
方法: 1.原型链继承 2.使用对象冒充继承