ZOJ1002 Fire Net

ZOJ1002题——Fire Net(JAVA)   题目的大概意思就是有这样一块n*n的空地,每一小块儿代表一块空位或者一堵墙。图上的白色正方形代表空位,黑色正方形代表墙。圆形代表的是堡垒,每个堡垒可以攻击上下左右四个方向整排的其它堡垒,但是墙可以挡住堡垒的攻击。然后现在问在给定的一个地形当中最多可以放多少个堡垒且不会互相攻击。输入数据  输入数据包括了一个或多个地形的描述,用0代表输入数据结束。每一块地图的描述第一个数据是一个正整数,代表了这... 阅读详情

Fire Net

Time Limit: 2000 msMemory Limit: 65536 KB

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
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 200
using namespace std;

int n ,cntx ,cnty ,cx[MAXN] ,cy[MAXN] ,tmp[20][20] ;
char map[15][15] ;
bool vis[MAXN<<1] ,flag[MAXN][MAXN];

void build()
{
    memset(flag,0,sizeof flag);
    memset(tmp,0,sizeof tmp);
    cntx=1;
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<n;++j)
            if(map[i][j]=='X')++cntx;
            else tmp[i][j]=cntx;
        if(map[i][n-1]!='X')++cntx;
    }

    cnty=1;
    for(int j=0;j<n;++j)
    {
        for(int i=0;i<n;++i)
            if(map[i][j]=='X')++cnty;
            else flag[tmp[i][j]][cnty]=1;
        if(map[n-1][j]!='X')++cnty;
    }

}

bool dfs(int u)
{
    for(int v=1;v<=cnty;++v)
        if(!vis[v]&&flag[u][v])
        {
            vis[v]=1;
            if(!cy[v]||dfs(cy[v]))
            {
                cx[u]=v ,cy[v]=u ;
                return 1;
            }
        }
    return 0;
}

void solve()
{
    memset(cx,0,sizeof cx);
    memset(cy,0,sizeof cy);

    int ans=0;
    for(int i=1;i<=cntx;++i)
        if(!cx[i])
        {
            memset(vis,0,sizeof(vis));
            ans+=dfs(i);
        }
    printf("%d\n",ans);
}

int main()
{
    while(~scanf("%d",&n)&&n)
    {
        for(int i=0;i<n;++i)
            scanf("%s",map[i]);
        build();
        solve();
    }
    return 0;
}

ZOJ1002 Fire Net(二分图匹配) 这道题的预处理有点恶心,自己没写出来,参考了一下别人的代码 题目大意: 有一个N*N(N     地图 最大合法放置方案(不唯一)  一种合法但不最大方案       不合法方案 输入: 第1行:一个整型变量N 第2-N+1行:城市的构造('X'表示墙,'.'表示街道) 多组测试数据,以N=0结束。 输出: 对于每组测试数据仅输出一行,即能放置的最大碉堡数。 样例 阅读详情

相关推荐

zoj1002 C语言

zoj 1002 C语言的为什么描述要这么多字啊。。

ZOJ--1002:Fire_Net

题目链接:点击打开链接 题目大意:在一个n*n的城市里 有墙  在没有墙的地方可以放堡垒,堡垒可以打到东南西北四个方向的任何东西(包括堡垒)但不可以打穿墙,现在在城市里放堡垒 可以使其打到         任何一条街道的任何地方。 求可以放置堡垒的最大数。     输入:先输入n表示城市的边长(最长为4),若n为0结束。     输出:输出每一个城市样例的最大堡垒数 例: Sample

yf224的博客 501

CMOS 半加器和全加器&&数字集成电路&& Cadence Virtuoso

数字集成电路——半加器和全加器

计科小学生的博客 1万+

[题解] ZOJ1002 -- Fire Net

Java复习

kradnangel的专栏 991

MTK metadata中AF模块的移除与配置调整

本文详细介绍了在MTK平台Camera开发中如何移除metadata中的AF(自动对焦)模块。通过系统清理MTK_CONTROL_AF_REGIONS、MTK_CONTROL_MAX_REGIONS等关键配置项,并调整对焦模式及硬件特性声明,确保定制化设备在禁用自动对焦功能后的稳定运行。

q1w3e5r7t9y的博客 571

oVirt 4.4.10超详细安装指南:从零搭建企业级虚拟化环境(附常见错误排查)

本文提供了oVirt 4.4.10企业级虚拟化平台的超详细安装指南,涵盖环境规划、系统准备、Engine安装配置、计算节点部署、存储系统集成及高级运维技巧。通过实战操作手册和常见错误排查方法,帮助用户从零搭建稳定高效的虚拟化环境,特别适合企业IT管理员参考实施。

wasm7browser的博客 351

ZOJ-1002 Fire Net

题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364501 【题目大意】 n行n列的地图,地图中黑色格子代表墙壁(输入样例中的‘X’),可以挡住子弹。地图中的白色格子代表空地(输入样例中的’.’),可放置碉堡。碉堡可以发射子弹,被子弹射中的碉堡将会被摧毁。现需在地图中放置碉堡,放置要求如下:任意两个碉堡之间不能相互摧毁,即相同行和相同列都不能出现两个及两个以上碉堡,除非碉堡之间有墙壁阻挡子弹。在以上要求下,求在给定地图中能

qq_51776588的博客 825

Hcaptcha验证码的‘免浏览器’破解思路:协议分析与N值算法逆向

本文深入解析Hcaptcha验证码的‘免浏览器’破解思路,通过协议分析与N值算法逆向,实现高效自动识别。文章详细拆解Hcaptcha的API交互流程,揭示关键参数`req`和`n`的生成机制,并提供轻量级实现方案,显著降低资源消耗,适用于大规模数据采集等场景。

weixin_30838873的博客 537

ZOJ 1002 - Fire Net 的答案(回溯法)

       ---------------------------------------------------------------------------------------------------------------------------        严格来讲,此题并不算我做出来的。因为我在WA后忍不住搜索了这道题的网上资料,并在参考了“洞庭散人”的代码后AC的。   ...

weixin_34236869的博客 259

EB tresos配置指南:CAN通信信号收发全流程解析

本文详细解析了使用EB tresos配置工具实现AUTOSAR架构下CAN通信信号收发功能的全流程。从环境准备、COM模块信号定义、PduR路由配置、CanIf硬件抽象到CAN驱动层设置,提供了清晰的步骤指南和关键配置要点,帮助开发者快速打通从应用层到物理层的数据链路,实现可靠的CAN通信。

weixin_29192141的博客 513

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍

目录Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍一、简单介绍二、Mask 实现的遮罩效果三、Soft Mask 实现遮罩效果四、 Soft Mask 的一些设置五、插件下载Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

仙魁XAN 8575

ZOJ 1002 Fire Net 深度优先搜索算法

这道里原来我在看别人代码之前, 也写过。 洋洋洒洒的写了一个main函数四个嵌套for循环, 第一次的大手笔。运行结果没有问题, 但就是提交不上去, 还不收呢?搁置了好几天后, 没办法放弃。 后来看了一下别人的代码, 写完后提交编译错误, 都是因为跟系统函数重名缘故。  这道题的名头是,DFS(Depth-First-Search)深度优先搜索算法 #include "iostrea

fofu33的专栏 1156

Kimi Code国产AI编程助手安装使用详细教程

Kimi Code 开发者智能编程服务简介:Kimi Code 是专为开发者提供的 AI 编程辅助工具,基于旗舰模型 Kimi K3(2.8万亿参数,支持100万token上下文)。提供 CLI、VS Code 插件等形式,支持代码阅读、编辑等功能。用户可通过API Key接入第三方工具。安装简单(Windows/Mac/Linux一键脚本),需在官网生成API密钥并登录使用。注意账户需充值余额方可正常调用服务。

猿小白的博客 2084

zoj1002 Fire Net

//zoj1002 Fire Net //Accepted 1002 C++ 00:00.01 436K #include int n; int max; char map[5][5];

fairylan的专栏 1239

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4238

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ZOJ 1002 Fire Net

简而言之,生成所有可能的碉堡放置方案,并通过判断每个方案是否合法,来寻找最大合法的碉堡数量。这个方法充分利用了暴力搜索和回溯的思想,通过递归遍历所有配置,最终找出最优解。

wuqingshun314159的博客 1148

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ZOJ1002-Fire Net

行 / 列 0 1 2 3 0 0 1 2 3 1 4 5 6 7 ...

kt1776133839的博客 314

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[ZOJ1002] Fire Net

题目链接: 走这里 题目分析: 联想到Asteroids这道题,将行和列分别作为二分图的两边的点,把点本身作为二分图的边去处理 那么这个题的限制条件打不穿的墙怎么处理呢,发现这样的话 \[ ...X.. \] 其实左边那段和右边那段在横着考虑的时候是互不影响的,不妨对行和列重新编号 用一下某题解的剪枝讲解的图,样例第一个大概就是这个样子 然后对于每个空地的行编号和列编号连一条边,当空地...

kma_093 288

ZOJ 1002 Fire Net —— C++

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 tha...

点滴博客 415

ZOJ 1002 Fire Net Solution

static int solve(int map[][],int size){ if(size == 0) return 0; int result = 0; for(int row = 0; row < size; row++) for(int column = 0;column < size; column++){ if(map[row][column] == 0){

Sunny 1298

ZOJ1002Fire net C++

Fire Net Time Limit: 2000 msMemory Limit: 65536 KB 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

qjsssss的博客 434

zoj 1002 Fire Net

用dfs来做~~但注意每次dfs回来后需要恢复到进入dfs前的状态。。。   /** map 0表示无wall houseblock 1表示 houseblock -1表示wall flagr 0 表示指定行无wall houseblock 1表示指定行有houseblock -1表示指定行有wall 当指定行有wall时,优先级最高,一定为

YYlxid————Nothing is possible if not try~ 1246

ZOJ1002 Fire Net

!!!写在前面的话语(泪水): ①大家一定要注意if/else嵌套时尽量不要省略大括号呀,哭辽...搞了三个小时没看出来死在哪嘤嘤嘤 ②用除法定行数记得一定要注意换行位置的分类呀。。。容易死人!!! ③感谢今天为我做饭提供做题能量的妈妈,感谢我的狗狗开心,她是最早看出来我不开心安慰我的(其实是自己安慰自己的叭hhhhhhh)。 ④谢谢今晚将好运赐予我的桐桐,今天晚上搞这个该死的水题惹我的宝贝儿生气了,对不起!!! Fire Net 题目传送门 Time Limit: 2000 msMemory

深秋无痕 360
上一篇: ZOJ1015 Parencodings
下一篇: ZOJ 1003 Crashing Balloon
Lycodeboy
博客等级 码龄11年 1170粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值