HDU-1312题解(DFS)
HDU-1312-DFS
Written by Void-Walker 2020-02-01 09:09:25
1.题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1312
2.题目大意:
有一个矩形房间,房间里有红砖块(‘#’)和黑砖块(‘.’)组成。现在有一个人站在一个@上面,他只能走黑色方块,现在问他最多能经过多少黑色方块。(他的初始位置也算)
3.题目思路:
这道题是一个非常经典的深度优先搜索。我们从他的初始位置开始搜索:
for(y=;y<hy;y++)
{
for(x=;x<wx;x++)
{
cin>>room[x][y];
if(room[x][y]=='@')
{
dx=x;
dy=y;
}
}
}
注意,认真读题,我们输入的两个尺寸参数第一个是数列,第二个才是横行,输入的时候要小心。之后,我们获得了初始位置就可以开始DFS了。
void DFS(int dx,int dy)
{
room[dx][dy]='#';
num++;
for(int i=;i<;i++)
{
int newx=dx+dirx[i];
int newy=dy+diry[i];
if(CHECK(newx,newy) && room[newx][newy]=='.')
{
DFS(newx,newy);
}
}
}
我们采用了一种非常巧妙的方法,每次搜索到一个点的时候,将这个点统一标记为红点,避免重复搜索。
这里的DFS非常经典,不包含其他拐弯抹角的地方,所以思想难度相对简单。
最后给出完整的代码:
#include<bits/stdc++.h>
using namespace std;
char room[][];
int dirx[]={,,-,};
int diry[]={,,,-};
int i,j;
int wx,hy,num;
bool CHECK(int x,int y)
{
if(x<wx && x>= && y<hy && y>= ) return true;
else return false;
}
void DFS(int dx,int dy)
{
room[dx][dy]='#';
num++;
for(int i=;i<;i++)
{
int newx=dx+dirx[i];
int newy=dy+diry[i];
if(CHECK(newx,newy) && room[newx][newy]=='.')
{
DFS(newx,newy);
}
}
}
int main()
{
int x,y,dx,dy;
while(cin>>wx>>hy)
{
if(wx== && hy==)
{
break;
}
for(y=;y<hy;y++)
{
for(x=;x<wx;x++)
{
cin>>room[x][y];
if(room[x][y]=='@')
{
dx=x;
dy=y;
}
}
}
num=;
DFS(dx,dy);
cout<<num<<endl;
}
}
HDU-1312题解(DFS)的更多相关文章
- HDU 1312:Red and Black(DFS搜索)
HDU 1312:Red and Black Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- HDU 1312 Red and Black --- 入门搜索 DFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
- HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)
题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/100 ...
- HDU 1312 Red and Black --- 入门搜索 BFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
- HDU.5692 Snacks ( DFS序 线段树维护最大值 )
HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...
- 题解报告:hdu 1312 Red and Black(简单dfs)
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
- HDU 1312 Red and Black (dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 1312 Red and Black(DFS,板子题,详解,零基础教你代码实现DFS)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDU 1312 Red and Black(经典DFS)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 一道很经典的dfs,设置上下左右四个方向,读入时记下起点,然后跑dfs即可...最后答 ...
- HDU 1312 Red and Black (DFS & BFS)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:有一间矩形房屋,地上铺了红.黑两种颜色的方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相 ...
随机推荐
- Bugku - CTF加密篇之聪明的小羊(一只小羊翻过了2个栅栏)
聪明的小羊 一只小羊翻过了2个栅栏 KYsd3js2E{a2jda}
- PyQt5数据可视化
1.下载PyQtGraph模块 Windows上下载: pip install pyqtgraph Linux上下载: pip3 install pyqtgraph MacOS上下载: pip3 in ...
- Attributes for Slot
关于AP Config中的一些参数的意义: Radio Type................................... RADIO_TYPE_80211ac-5 Radio Subba ...
- 关于无线的Idle Timeout和Session Timeout
1.Session Timeout Session Timer的默认值为1800s,也就是30min.Session Timeout:当该计时器超时时,使得客户端强制发生重认证,这个时间是从客户端认证 ...
- NOIP2016换教室 BZOJ 4720
BZOJ 4720 换教室 题目描述: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上 ...
- 【PAT甲级】1047 Student List for Course (25 分)
题意: 输入两个正整数N和K(N<=40000,K<=2500),接下来输入N行,每行包括一个学生的名字和所选课程的门数,接着输入每门所选课程的序号.输出每门课程有多少学生选择并按字典序输 ...
- 「AHOI2014/JSOI2014」宅男计划
「AHOI2014/JSOI2014」宅男计划 传送门 我们首先要发现一个性质:存货天数随买食物的次数的变化类似于单峰函数. 具体证明不会啊,好像是二分加三分来证明?但是没有找到明确的严格证明. 感性 ...
- word2vec词向量处理中文语料
word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间 ...
- 在javaweb中从servlet端向jsp端传递数据的方法
1.servlet端: request.setAttribute("student", student)://向请求域中添加名称为student,内容为student中内容的数据( ...
- GO 空白标识符 _
空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃. _ 实际上是一个只写变量,你不能得到它的值.这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用 ...