HDU 1045 Fire Net

【代码超详解】HDU 1045 Fire Net(建图 + 二分图匹配) 一、题目描述 样例输入: Sample Input 4 .X.. .... XX.. .... 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 0 样例输出: 5 1 5 2 4 二、算法分析说明与代码编写指导 本题的难点在于如何建立正确的图论模型。 一行、一列同时只能有一个炮,除非被墙挡住。炮弹向上下左右发射后,直到被... 阅读详情

亮瞎。。。居然有人说数据水。。。尼玛WA了6次。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<vector>
using namespace std;
int n,ans,N,a[20][20],cnt[20];
char map[5][5];
bool vis[5][5];
void change(int x,int y){
    int i,k=x*n+y;
	cnt[k]=0;
    for(i=x;i<n;i++)
        if(map[i][y]=='.'){
			if(!vis[i][y])
				a[k][cnt[k]++]=i*n+y;
            vis[i][y]=true;
		}
        else
            break;
    for(i=x;i>=0;i--)
        if(map[i][y]=='.'){
			if(!vis[i][y])
				a[k][cnt[k]++]=i*n+y;
            vis[i][y]=true;
		}
        else
            break;
    for(i=y;i<n;i++)
        if(map[x][i]=='.'){
			if(!vis[x][i])
				a[k][cnt[k]++]=x*n+i;
            vis[x][i]=true;
		}
        else
            break;
    for(i=y;i>=0;i--)
        if(map[x][i]=='.'){
			if(!vis[x][i])
				a[k][cnt[k]++]=x*n+i;
            vis[x][i]=true;
		}
        else
            break;
}
void dfs(int pos,int res){
    int i,x,y,j;
    if(ans<res)
        ans=res;
    for(i=pos+1;i<N;i++){
        x=i/n,y=i%n;
        if(map[x][y]=='.'&&!vis[x][y]){
            change(x,y);
            dfs(i,res+1);
            for(j=0;j<cnt[i];j++)
				vis[a[i][j]/n][a[i][j]%n]=false;
        }
    }
}
int main()
{
    int i,j;
    while(scanf("%d",&n),n){
        ans=0;
        for(i=0;i<n;i++)
            scanf("%s",map[i]);
		memset(cnt,0,sizeof(cnt));
        memset(vis,false,sizeof(vis));
        N=n*n;
        for(i=0;i<N;i++){
            int x=i/n,y=i%n;
            if(map[x][y]=='.'){
                change(x,y);
                dfs(i,1);
				memset(vis,false,sizeof(vis));
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


 

HDU - 1045 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 cas... 阅读详情

相关推荐

process插件_利用SPSS 插件MLmed检验多水平中介的调节模型

本文介绍一个SPSS插件,用于检验多水平中介的调节,及该方法与Mplus的比较。1 Mlmed 简介及安装Mlmed 简介: Mlmed 由Rockwood 2017年开发,基于SPSS插件计算Multilevel moderated mediation. 可以提供multilevel mediation Monte Carlo 置信区间比如(模拟20000次),以及多水平调节的...

weixin_39976081的博客 5775

HDU T1045 Fire Net(待续)

                                    HDU T1045 Fire Net 题解:     八皇后的变题,鄙人一开始思路太不严谨,想着遍历整个图,是‘.’的点,表示可以放置城堡,就把它四个方向上的点都标记掉,遇到‘X’或边界就停止,然后步数+1,回溯的时候,调用的是原函数进行撤回标记。但这样往往犯了大错,因为标记是一样的,撤回标记就有可能会把与前一个城堡的标记...

Mr__Charles的博客 224

Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)

简介:本文介绍了Android开发中常用的键值对存储方案,包括SharedPreferences、MMKV和DataStore,并且对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。

LiuYong_01的博客 1793

hdu1045 Fire Net (二分图匹配)

分析: 这题的弱化版:ch6802 車的放置 两题的区别在于ch6802禁止的点只是不能放,但是车还是能穿过去的,因此一行最多只能放一个 而hdu1045,也就是这题,禁止的地方是墙,能把两个车隔开 容易想到有墙的存在,一行就可能放两个甚至多个车 如果没有墙,每行共用一个节点标记也就是行数, 有墙的话只要把墙隔开的两边各自标记就行了。 列同理 code: #include<iostream&...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 246

STM32G030C8T6 ADC+DMA实战:同时采集外部电压和芯片温度的完整代码流程

本文详细介绍了STM32G030C8T6芯片通过ADC+DMA实现外部电压和芯片内部温度采集的完整流程。从硬件设计到CubeMX配置,再到驱动模块化实现与系统优化,提供了高精度多通道采集系统的实战指南,特别适合嵌入式开发者在工业控制和环境监测项目中应用。

weixin_42653691的博客 467

kettle实验十一:没有数据流入时停止操作

【实验目的】 1.利用Kettle的“阻塞数据直到步骤都完成”,“检测空流”,“中止”等组件,实现Kettle转换流程的控制。 2.熟练掌握“阻塞数据直到步骤都完成”,“检测空流”,“中止”等组件的使用,实现Kettle转换流程的控制。 【实验原理】 “检测空流”组件可以检测所在转换的输入数据,如果整个转换没有输入数据,通过“中止”组件终止整个转换的流程。在存在数据输入的情况,为了能让数据输出,需要和“阻塞数据直到步骤都完成”配合使用。当所有数据都已经从上个步骤“字段选择”读取完毕后,通过“阻塞数据直到步骤

weixin_44727274的博客 3848

HDU 1045 Fire Net

有暴力搜索和二分图匹配两种解题思路。用dfs搜比较容易,而二分图则是一种更为优化的算法。刚刚接触二分图,发现这种思路很巧妙,以后要多加练习。 下面是dfs求法 #include #include using namespace std; char map[5][5]; int visitr[5]; //记录横坐标 int visitl[5]; //记录纵坐标 int maxn,

IQ_IT的专栏 1000

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1065

HDU 1045 Fire Net

Fire Net 题目链接 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 8 Accepted Submission(s) : 7Problem Description Suppose that we have a square city

南风古 361

RouterOS网桥VLAN实战:从零构建安全隔离的二层虚拟网络

本文详细讲解了如何在RouterOS上利用网桥和VLAN功能,从零开始构建安全隔离的二层虚拟网络。通过分步实战演示,涵盖核心概念、网桥创建、PVID设置、VLAN规则配置及安全过滤,帮助网络管理员实现办公、访客与服务器网络的逻辑隔离与灵活管理,提升网络安全性。

u9v0w的博客 504

6.8 点云相关软件——CoProcess

摘要 CoProcess是华测导航研发的三维点云全流程处理平台,支持海量数据浏览、编辑及多类型成果输出,适配地形测绘、道路建设等行业需求。软件采用模块化设计,包含基础功能(数据导入、分类、建模等)和行业定制模块(地形、道路、矿山等),支持多格式数据交互与自动化处理,显著提升作业效率。相比Lidar360,CoProcess操作更简便、性价比更高;相比开源工具CloudCompare,其行业适配性与专业功能更优。2025版本优化了数据处理性能与智能算法,需授权激活高级功能,适合商业项目应用。

qq625924821的博客 248

HDU 1045. Fire Net

链接 http://acm.hdu.edu.cn/showproblem.php?pid=1045 题意 在 n∗nn*nn∗n 的图上有一些围墙,放置一些大炮,大炮能攻击上下左右任何距离的其他大炮,但不能穿过围墙,求最多能放多少个互相不会攻击的大炮 思路 按行对每个连通块染色,然后按列对每个连通块染色 对每个点所在的行连通块与列连通块之前连边 跑二分图最大匹配 代码 #include <bits/stdc++.h> #define SZ(x) (int)(x).size() #define A

c4Lnn 的 优快云 博客 136

6、哈代空间、算子函数及相关概念解析

本文深入探讨了数学中哈代空间与算子函数的核心概念,包括强函数的因式分解、半单零点的定义与性质、Blaschke-Potapov乘积的存在性、Nagy-Foias模型算子的结构与谱分析、可数集合的相关性质(如Carlesonian集合、稀有集合等)、简单分式族的可分性与基性质,以及指数型整函数的增长特性。文章还分析了这些数学对象之间的内在联系,并通过图表与表格形式直观呈现了集合性质与函数空间结构的关系。这些理论不仅在数学分析和泛函分析中具有重要意义,也在信号处理、量子力学等应用领域具有广泛价值。

yhn4567890的博客 170

HDU1045 Fire Net【DFS】

题目链接:HDU1045 Fire Net【DFS】 题意:一个至多4*4的棋盘,棋盘上有一些墙壁,可以阻挡子弹,炮台可以向四个方向发射子弹,问在保证他们不能互相攻击的情况下至多可以放置多少炮台; 分析:搜就对了; #include<bits/stdc++.h> using namespace std; char mp[5][5]; int n,ans; bool check(...

MaJorieL 218

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU1045 Fire Net

HDU1045 Fire Net http://acm.hdu.edu.cn/showproblem.php?pid=1045 解题思路:本题是加条件变形后的搜索题,中间有检查的成份,弄的题目有点恶心的感觉。 给定一个n*n的地图,图中有“。”和“X”,"X"表示墙,“。”表示空地。可以在空地上修建炮台,当时互相可见的炮台(同行或同列,且中间没有墙隔开)就会互相摧毁对方,造成事故。要求在图中的空地上修建炮台,要使炮台不会互相攻击。要求出最多能修建多少个炮台。地图的大小n<=4.虽然题目比较恶心,还好数

花花的笔记 1341

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

hdu 1045 Fire Net

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:给出一个矩阵,X代表墙,要求放x个武器,武器的攻击范围为所在的行和列,求x的最大值。 题目分析:因为看到n最大只有4,因为大二有段时间做PE的原因,马上就想到了状态压缩来表示武器的放置情况,我算了一下复杂度觉得不出意外还是不是超时的就动手写了一下,期间最傻的一次是突然觉得从

happiness Onion 729

HDU1045Fire Net

题目大意:在图上放置炮台,并且炮台之间不能相互威胁(即两个炮台不能中间无阻碍地放置在同行或同列),个人感觉有点像N皇后的问题,只不过进阶的东西就是多了墙 解题思路:做这题时想起了当时做N皇后的解法,只不过多了一步遇到墙壁就停止,不过发现在你不放在这个位置时,准备回溯你要把之前标记的行和列全部清空,问题就来了,如果你在清空标记时遇到有一格同时被两个炮台标记怎么办,这时就换种思路,即你每当要放炮台时

小胡同的诗 287

hdu1045 Fire Net(二分图最大匹配)

//hdu 1045 二分最大匹配 //以行和列为点,可以放的连边,中间有墙的看做不同的行或列。 //求二分图的最大匹配。同一行同一列只能放一个。即连某个点的边只能有一条。 //行和行,列和列之间互不影响。 #include #include #include using namespace::std; const int N=10; char map[N][N]; int g[N][N]; in

野生的TFgirl 1220

Fire Net 【HDU - 1045 】

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

Meant_To_Be的博客 188

HDU 1045 Fire Net 二分图

题意:在给出的图中‘.’放置点。(同一行或者同一列的联通块中不能放置两个或以上黑点)思路:二分图,同一行的联通块缩成一个点,因为是等价的,称为二分图的X部,同理,同一列的联通块缩成一个点,称为二分图的Y部,‘.’处X部和Y部连一条线。找最大匹配即可。 http://acm.hdu.edu.cn/showproblem.php?pid=1045 /*************************

NM的专栏 522

HDU 1045-Fire Net

题意链接题目分析题意在n*n的地图上放置大炮(n最大为4),避免互相攻击不能将其放在同一行,不能在同一列,但墙可以阻隔攻击,求最多能放置的数量。思路优先放置影响范围小的大炮。代码#include<stdio.h> #include<string.h> #define INF 8 char map[5][5]; int a[5][5]; int main(){ //freopen("TXA.t

XuKathy的博客 779
上一篇: POJ 1015 Jury Compromise
下一篇: POJ 1971 Parallelogram Counting
E_Windrunner
博客等级 码龄15年 7粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值