原题链接:点击!

 

大致题意:白块表示可以放置炮台的位置——每个炮台可以攻击到上下左右的直线上的炮台(也就是说在它的上下左右直线上不可以再放置炮台,避免引起互相攻击),黑块表示隔离墙的位置——不可放置并且可以阻挡炮火;求对于一个最大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】的更多相关文章

  1. HDOJ(HDU).1045 Fire Net (DFS)

    HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...

  2. HDU 1045 Fire Net(dfs,跟8皇后问题很相似)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)   ...

  3. HDU 1045 Fire Net 状压暴力

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)  ...

  4. HDU 1045(Fire Net)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...

  5. HDU 1045——Fire Net——————【最大匹配、构图、邻接矩阵做法】

    Fire Net Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  6. hdu 1045 Fire Net(最小覆盖点+构图(缩点))

    http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS     Memory Limit:32768KB   ...

  7. HDU 1045 Fire Net 【连通块的压缩 二分图匹配】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)    ...

  8. HDU 1045 Fire Net 二分图建图

    HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...

  9. HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  10. hdu 1045:Fire Net(DFS经典题)

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

随机推荐

  1. 高级UI-MD动画

    MD动画是谷歌推出的一种动画效果,其实现的效果能让用户看着很是舒服,符合MD动画的动画,有很强的用户交互体验 Touch Feedback(触摸反馈) 在触摸反馈这一块,用的最多的就是水波纹效果,而水 ...

  2. TCP/IP学习笔记10--以太网之基本概念2: 以太网帧格式

    "如果错过太阳时你流了泪,那么你也要错过群星了."--- 泰戈尔 前导码(Preamble): 最前面时8个字节的前导码,表示一个以太网帧的开始. 另外,前导码的最后两个比特是&q ...

  3. QT 创建一个线程播放监控视频

    1.创建一个线程类(PlayVideoThread): PlayVideoThread.h头文件 #pragma once #include <QObject> #include &quo ...

  4. Mysql 定时备份(mysqldump)

    #!/bin/bash today=`date +%Y-%m-%d` deleday=`date -d '7 day ago' +%Y-%m-%d` path=/home/data/mysqlback ...

  5. 20191031:Python取反运算详解

    20191031:Python取反运算详解 取反运算:~3 == 4 1.对于数字 3 =======>转换为二进制表示为011 2.对011取反为100 3.为什么表示-4 a.计算机用补码表 ...

  6. Python字符串图解

    >>> word = "Python" >>> word[:2]  # character from the beginning to posi ...

  7. Linux 进程控制

    分享知乎上看到的一句话,共勉: 学习周期分为学习,思考,实践,校正四个阶段,周期越短,学习效率越高. 前面讲的都是操作系统如何管理进程,接下来,看看用户如何进行进程控制. 1.进程创建 先介绍一下函数 ...

  8. 如何利用 iTunes 把 m4a/wav 文件转成 MP3 格式

    MAC技巧 | 如何利用 iTunes 把 m4a/wav 文件转成 MP3 格式 - 简书

  9. 【exgcd】卡片

    卡片 题目描述 你有一叠标号为1到n的卡片.你有一种操作,可以重排列这些卡片,操作如下:1.将卡片分为前半部分和后半部分.2.依次从后半部分,前半部分中各取一张卡片,放到新的序列中.例如,对卡片序列( ...

  10. [Luogu5280][ZJOI2019]线段树(线段树+DP)

    https://www.luogu.org/blog/Sooke/solution-p5280 首先想到对线段树上每个点分别维护有多少棵线段树在它上有标记(f[]),然后想到对于每个操作,根据转移的不 ...