# Fire Net

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8185    Accepted Submission(s): 4691

Problem Description
Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall.
A blockhouse is a small castle that has four openings through which to shoot. The four openings are facing North, East, South, and West, respectively. There will be one machine gun shooting through each opening.
Here we assume that a bullet is so powerful that it can run across any distance and destroy a blockhouse on its way. On the other hand, a wall is so strongly built that can stop the bullets.
The goal is to place as many blockhouses in a city as possible so that no two can destroy each other. A configuration of blockhouses is legal provided that no two blockhouses are on the same horizontal row or vertical column in a map unless there is at least one wall separating them. In this problem we will consider small square cities (at most 4x4) that contain walls through which bullets cannot run through.
The following image shows five pictures of the same board. The first picture is the empty board, the second and third pictures show legal configurations, and the fourth and fifth pictures show illegal configurations. For this board, the maximum number of blockhouses in a legal configuration is 5; the second picture shows one way to do it, but there are several other ways.

Your task is to write a program that, given a description of a map, calculates the maximum number of blockhouses that can be placed in the city in a legal configuration.

Input
The input file contains one or more map descriptions, followed by a line containing the number 0 that signals the end of the file. Each map description begins with a line containing a positive integer n that is the size of the city; n will be at most 4. The next n lines each describe one row of the map, with a '.' indicating an open space and an uppercase 'X' indicating a wall. There are no spaces in the input file.

Output
For each test case, output one line containing the maximum number of blockhouses that can be placed in the city in a legal configuration.

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<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

char pic[][];
int ans, n;
int Judge(int row, int col)
{
for(int i=col-; i>=; i--)//判断所在列
{
if(pic[row][i]=='a') return false;
if(pic[row][i]=='X') break;
}
for(int i=row-; i>=; i--)//判断所在行
{
if(pic[i][col]=='a') return false;
if(pic[i][col]=='X') break;
}
return true;
}
void dfs(int cur, int tot)
{
if(cur==n*n)
{
ans = max(ans, tot);
return;
}
else
{
int row = cur/n;//这里是一个很有意思的小技巧
int col = cur%n;
if(pic[row][col]=='.'&&Judge(row, col))
{
pic[row][col]='a';
dfs(cur+, tot+);
pic[row][col] = '.';
}
dfs(cur+, tot);
}
}

int main()
{
while(scanf("%d", &n), n)
{
memset(pic, , sizeof(pic));
for(int i=; i<n; i++)
scanf("%s", pic[i]);
ans = ;
dfs(, );
printf("%d\n", ans);
}
return ;
}```

```#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

char pic[][];
int ans, n;
int Judge(int row, int col)
{
for(int i=n-; i>=; i--)//判断所在列
{
if(pic[row][i]=='a') return false;
if(pic[row][i]=='X') break;
}
for(int i=n-; i>=; i--)//判断所在行
{
if(pic[i][col]=='a') return false;
if(pic[i][col]=='X') break;
}
return true;
}
void dfs(int cur, int tot)
{
if(cur==n*n)
{
ans = max(ans, tot);
return;
}
else
{
int row = cur/n;//这里是一个很有意思的小技巧
int col = cur%n;
if(pic[row][col]=='.'&&Judge(row, col))
{
pic[row][col]='a';
dfs(cur+, tot+);
pic[row][col] = '.';
}
dfs(cur+, tot);
}
}

int main()
{
while(scanf("%d", &n), n)
{
memset(pic, , sizeof(pic));
for(int i=; i<n; i++)
scanf("%s", pic[i]);
ans = ;
dfs(, );
printf("%d\n", ans);
}
return ;
}```

## HDU1045 Fire Net（DFS）的更多相关文章

1. HDU1045 Fire Net（DFS枚举||二分图匹配） 2016-07-24 13:23 99人阅读 评论(0) 收藏

Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...

2. ZOJ 1002 Fire Net（dfs）

嗯... 题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364501 这道题是想出来则是一道很简单的dfs: 将一 ...

3. Fire Net（dfs）

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

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. LeetCode Subsets II （DFS）

题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...

6. LeetCode Subsets （DFS）

题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...

7. HDU 2553 N皇后问题（dfs）

N皇后问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在 ...

8. 深搜（DFS）广搜（BFS）详解

图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

9. 【算法导论】图的深度优先搜索遍历（DFS）

关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...

## 随机推荐

1. USB 设备类协议入门【转】

本文转载自:http://www.cnblogs.com/xidongs/archive/2011/09/26/2191616.html 一.应用场合 USB HID类是比较大的一个类,HID类设备属 ...

2. STM32内存跟FLASH问题

RO: 常量 ZI: 未初始化的全局变量 RW: 初始化的全局变量 Code: 程序本身 Code, RO-data,RW-data ..............flash RW-data, ZIda ...

3. Java中的HashMap 浅析

4. Oracle性能优化--DBMS_PROFILER

想看到过程或者函数执行每一步的过程:想看到每一步所占的时间吗?借助profiler吧:它可以满足你来分析过程/函数执行比较久:可以直接快速找到病因:从而可以优化那一步需要优化下.        一 ...

5. javascript——web前端编程

一.弹出提示框: 连接 function disp_prompt()  {  var name=prompt("请输入您的名字","Bill Gates")  ...

6. 进程外session

进程外session A  SqlServer 1.管理员身份运行cmd 2.更换目录  cd c:\Windows\Microsoft.NET\Framework\v4.0.30319> 3. ...

7. hdu4914 Linear recursive sequence

用矩阵求解线性递推式通项 用fft优化矩阵乘法 首先把递推式求解转化为矩阵求幂,再利用特征多项式f(λ)满足f(A) = 0,将矩阵求幂转化为多项式相乘, 最后利用傅里叶变换的高效算法(迭代取代递归) ...

8. Fishnet(暴力POJ 1408)

Fishnet Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1911   Accepted: 1227 Descripti ...

9. zoj Gao The Sequence

Gao The Sequence Time Limit: 2 Seconds      Memory Limit: 65536 KB You are given a sequence of integ ...

10. Storm系列之一——Storm Topology并发