Problem:
Fire Net
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.
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.
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
Analysis:
地图的每个位置有以下几种状态:
空闲(NO),墙(WALL),城堡(BLOCK),处于其他城堡射程.
遍历每一行,在每一行的两墙之间,寻找这样的位置,此位置若建设城堡,可及的视野最小。找到后,建设城堡,并标记其视野为“OCCPY(占用)“。在此行的下一个墙间间隔进行同样的操作,若没有这样的间隔,转向下一行,进行同样的操作。
Attention:
注意输入输出的格式要严格按照要求,否则submit后不会AC的.望上到处有这方面的帖子,OJ上也有教程.本人第一次提交,算法是正确的,因为输入输出格式提交了两次错误的代码.一定要认真审题.
上次的代码有逻辑错误,但在ZOJ和杭电OJ上都AC了。后来被我找到一个逻辑错误如下,若在以下情况:
. . . .
. . . .
XXX .
XXX .
正确答案是3,在(1,1)(2,2),(3,4)建设城堡。
但错误程序的结果是2,因为按错误的逻辑,第一次便将城堡建设在(1,4)位置,第二个在(2,3),然后就没有然后了。
传说ZOJ上数据比较刁钻,但还是被我不小心钻了空子啦,这道题上其测试数据有点小问题啊^_^。修改后的程序也AC了,自己也找了许多数据测试过,是正确的,逻辑上也是正确的。代码比较长~
附上上次有错误的代码,以供参考:
Solution(C语言):
分享到:
相关推荐
NULL 博文链接:https://weitch.iteye.com/blog/1006972
【标签】"ZOJ1002" 作为唯一标签,再次强调了这个压缩包的内容与ZOJ平台上的第1002题紧密相关。在ZOJ上,每个题目都有自己的标签,便于用户搜索和分类。 【压缩包子文件的文件名称列表】仅有一个文件名 "zoj 1002...
zoj 1002 C语言的为什么描述要这么多字啊。。
能AC 通过的c++代码,包括zoj1002,1091,1789
zoj 题库 详细解答 解题代码 该资源主要涵盖了 zoj 题库中的各种编程题目,涵盖了基本算法、数据结构、数学运算等多个方面的知识点。下面是对该资源中出现的知识点的详细解释: 1. 第一次 ACM 总结(7th ACM) 该...
【标签】"zoj 源码 700"是关键词,表明这个资源与ZOJ平台相关,且着重于700个题目源代码的分享,对学习者而言是一个宝贵的参考资料库。 【压缩包子文件的文件名称列表】"zoj 源码700"可能是压缩包内的文件夹名称,...
【ZOJ.zip】是一个压缩包,里面包含了与ZOJ(Zhejiang Online Judge)相关的ACM(International Collegiate Programming Contest)题解。ZOJ是一个在线编程竞赛平台,它为参赛者提供了一系列算法题目进行练习,以...
标题中的"ZOJ1002.rar"是一个竞赛编程题目,通常在在线判题系统如ZOJ(Zhejiang Online Judge)中出现。这个题目涉及的是"Windows编程",使用"C/C++"语言来实现。描述中提到的是利用类似于迪杰斯特拉(Dijkstra)...
ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,主要面向计算机科学与信息技术的学生和爱好者,提供了大量的算法题目供参赛者练习和提交代码。"ZOJ题目答案源码"是一个压缩包文件,其中包含了700多道...
标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...
浙江大学ZOJ题目分类旨在为编程学习者提供一个系统化的训练平台,帮助他们在算法和编程技能上实现质的飞跃。ZOJ平台提供的分类题目包括但不限于基础算法、数据结构、动态规划以及模拟问题等,这些分类覆盖了计算机...
《ZOJ 4041问题的正确解法与程序分析》 ZOJ(Zhejiang Online Judge)是一个知名的在线编程竞赛平台,其中的题目编号为4041的题目吸引了众多程序员的关注。本篇文章将深入探讨ZOJ 4041的正确解法,并对提供的源代码...
ZOJ,全称为Zhejiang Online Judge,是一个知名的在线编程竞赛平台,主要服务于浙江大学和国内其他高校的学生,提供丰富的算法题目供参赛者练习和比赛。这个压缩包文件名为"ZOJ 700多题源代码",意味着它包含了解决...
【标题】"ZOJ1027解题指南"是一...总的来说,"ZOJ1027解题指南"是一份宝贵的教育资源,不仅提供了问题的解决方案,还可能包含了解题思路的分析和代码实现的示范,有助于提升编程竞赛选手的算法设计能力和编程实践技能。
【标签】中的关键词进一步确认了内容的主题,包括"acm"(国际大学生程序设计竞赛)、"新手必备"、"浙大"、"解答"、"代码库"、"zoj"和"zju",这些都是与ACM竞赛、浙江大学以及ZOJ平台相关的关键信息。 【压缩包子...
ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...
标题“Zoj 1005我的解答已经AC”表明这是一个关于在线编程竞赛ZOJ(Zhejiang Online Judge)的问题,且提交的解决方案已经通过了所有测试用例(Accepted,简称AC)。ZOJ是一个用于练习和评测算法能力的平台,其中的...
Problem Arrangement zoj 3777
#### 一、FireNet1002:网络流量分析与优化 在FireNet1002问题中,主要考察的是网络流量管理和优化技术。该问题通常涉及到如何在有限的带宽资源下,合理分配网络流量,以确保关键业务的正常运行,同时最大化网络...
ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)领域中有着广泛的影响力。这个“ZOJ题解集合-截至2835”显然是一份包含了大量ZOJ题目解决方案的压缩包,其中涵盖了...