【HDU-1045,Fire Net-纯暴力简单DFS】
原题链接:点击!
大致题意:白块表示可以放置炮台的位置——每个炮台可以攻击到上下左右的直线上的炮台(也就是说在它的上下左右直线上不可以再放置炮台,避免引起互相攻击),黑块表示隔离墙的位置——不可放置并且可以阻挡炮火;求对于一个最大4*4的格子来说,最大的放置炮台的个数是多少。
简单分析:
简单的dfs();由于本题地图很小,不用考虑太多,尽情暴力即可。先把DFS枝干画出来,然后枝叶就用函数来具体实现。
AC代码:(附注释)
- #include <iostream>
- #include<string.h>
- #include<algorithm>
- #include<stdlib.h>
- #include<stdio.h>
- using namespace std;
- char mp[][];
- int n,ans;
- int dir[][]={ {,},{,-},{,},{-,} };
- int legal(int x,int y){//若点x,y可以放置炮台,返回1
- for(int i=;i<;i++){
- for(int k=;k<=;k++){ //四个方位顶多走3步
- int xx,yy;
- xx=x+dir[i][]*k;
- yy=y+dir[i][]*k;
- if(!(xx>=&&yy>=&&xx<=n-&&yy<=n-)){ //越界,break,搜下一个方位!
- break;
- }
- if(mp[xx][yy]=='X'){ //一个方位上存在墙体
- break;
- }
- if(mp[xx][yy]=='D'){//一个方位上存在炮台,返回0
- return ;
- }
- }
- }
- return ;
- }
- void dfs(int step) //step表示已经完成的点数
- {
- ans=max(ans,step);
- for(int i=;i<n;i++){//每次搜索就是遍历一遍图,由于本题数据范围贼小,就不用考虑标记等
- for(int j=;j<n;j++){
- if(mp[i][j]=='.'&&legal(i,j))//找到一处合法的‘.’
- {
- mp[i][j]='D';//替换成D,简单清晰
- dfs(step+);//dfs迭代
- mp[i][j]='.';//取消标记
- }
- }
- }
- }
- int main()
- {
- while(scanf("%d",&n),n!=){
- for(int i=;i<n;i++){//读图
- scanf("%s",mp[i]);
- }
- ans=;
- dfs(); //开始搜索!
- printf("%d\n",ans);
- }
- return ;
- }
【HDU-1045,Fire Net-纯暴力简单DFS】的更多相关文章
- HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...
- HDU 1045 Fire Net(dfs,跟8皇后问题很相似)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045 Fire Net 状压暴力
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045(Fire Net)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...
- HDU 1045——Fire Net——————【最大匹配、构图、邻接矩阵做法】
Fire Net Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- hdu 1045 Fire Net(最小覆盖点+构图(缩点))
http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS Memory Limit:32768KB ...
- HDU 1045 Fire Net 【连通块的压缩 二分图匹配】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1045 Fire Net 二分图建图
HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...
- HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- hdu 1045:Fire Net(DFS经典题)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
随机推荐
- 解释张量及TF的一些API
张量的定义 张量(Tensor)理论是数学的一个分支学科,在力学中有重要应用.张量这一术语起源于力学,它最初是用来表示弹性介质中各点应力状态的,后来张量理论发展成为力学和物理学的一个有力的数学工具.张 ...
- 树莓派3B安装arm64操作系统
pi64 pi64基于Debian 9,地址如下https://github.com/bamarni/pi64 烧录过程还是用SDFormatter格式化,用Win32DiskImager写入即可,没 ...
- 【VS开发】如何判断客户端SOCKET已经断开连接?
http://biancheng.dnbcw.info/linux/366100.html 最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与server端建立连接,然后 ...
- centos7 双网口绑定
1.关闭和停止NetworkManager服务 systemctl stop NetworkManager.service # 停止NetworkManager服务 systemctl disable ...
- urls 视图层
urls.py 路由层 路由与视图函数对应关系 >>> 路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射 ...
- 【转帖】docker 如何删除none镜像
https://blog.csdn.net/hicoldcat/article/details/80802447 shell 命令博大精深 需要仔细学习 删除none的镜像,要先删除镜像中的容器.要删 ...
- Java:session中的invalidate()的作用是什么呢?求解
手工杀会话.会话失效有2种可能:超时和手工杀会话.手工杀方便省时间,程序员都爱用. 比如我做一个程序需要登录,中间访问的页面有会话控制,如果没有登录则跳转到登录页面,退出时清会话信息. 这是有两个选择 ...
- java当中JDBC当中请给出一个sql server的stored procedure例子
3.sql server的stored procedure例子: import java.sql.*;public class StoredProc0 {public static void main ...
- C++ 与 MATLAB 混合编程总结(14)
1. 前言 因为毕业设计的需求,研究了一下,C++如何与MATLAB一起混合编程,中间走了一些弯路,这里总结一下. 我用的主要是C++如何调用MATLAB,而没有涉及MATLAB如何调用C++. 注意 ...
- python 之 面向对象基础(组合和封装)
7.4 组合 解决类与类之间代码冗余问题有两种解决方案: 1.继承:描述的是类与类之间,什么是什么的关系 2.组合:描述的是类与类之间的关系,是一种什么有什么的关系 一个类产生的对象,该对象拥有一个属 ...