HDU 1241 DFS基础题 Oil Deposits石油储藏 以初学者角度+详细注释
来源:互联网 发布:网络综合布线施工顺序 编辑:程序博客网 时间:2024/05/04 12:20
题意:检测油块数量,八个方向上有油块就视为相同油层的油块。*号表示没有油块,@号表示有油块,图是m行n列的图。当m=0时结束程序。
DFS简单题,博主这样的新手都能一次AC(激动了一下午)。纯原创。
以一个初学者的视角对于DFS的感觉请参考今天上午的另一篇博文HDU 1016的那篇(才过了一个中午你想我有新感受?)
正文:本题数据量比上午还低,从AC图片可以看出这次才用了31ms,上午那个都用了700+。
思路:对图进行遍历,找到新油块就进行dfs把和它相同油层的油块标记为同一油块(防止遍历过程中遍历到重复油块),由于每个点最多只走一次,所以本题dfs不需要取消标记。
题目传送门(喜欢蓝色怪我咯)
以下是我的AC代码,写得丑陋请见谅。
我在注释中写得很详细了,这里也不知道还要写什么了。我以一个初学者得角度写这篇博文,思路直接没技巧愚蠢没大脑,如果哪里错了请各位大佬指出,我一定改正。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int m,n;char str[110][110];bool book[110][110];void dfs(int x,int y){ int next[8][2]= { {0,1},{1,1},{1,0},{1,-1}, //定义八个扩展方向 {0,-1},{-1,-1},{-1,0},{-1,1} }; int tx,ty; for(int k=0; k<8; k++) //向八个方向进行扩展 { tx=x+next[k][0]; ty=y+next[k][1]; if(tx<1 || tx>m || ty<1 || ty>n) //判断是否边界 continue; if(book[tx][ty]) //判断是否已走 continue; if(str[tx][ty]=='@') //判断是否有相同油层的油块 { book[tx][ty]=true; //同主函数介绍,良好的读程序方式是从主函数读起 str[tx][ty]='.'; dfs(tx,ty); } //本次dfs搜索不执行取消标记,因为每块油块只需走一次 } return; //返回语句很重要,没有就死循环}int main(){ //freopen("input.txt","r",stdin); while(scanf("%d%d",&m,&n)!=EOF) { if(m==0) break; int sum=0; //初始化总数 memset(book,false,sizeof(book)); //初始化标记数组 for(int i=1; i<=m; i++) //读入地图信息 { getchar(); //吃掉每行的回车,如果放在scanf下面,亲测有问题,我不知道为什么 for(int j=1; j<=n; j++) scanf("%c",&str[i][j]); } for(int i=1; i<=m; i++) //遍历地图发现油块就进行dfs把相同油层的块都标记掉 { for(int j=1; j<=n; j++) { if(str[i][j]=='@') { sum++; book[i][j]=true; //找到新油块的初始位置标记为已走点 str[i][j]='.'; //标记掉已找到的油块 dfs(i,j); //利用dfs把相同油层的油块都标记掉 } } } printf("%d\n",sum); } return 0;}
0 0
- HDU 1241 DFS基础题 Oil Deposits石油储藏 以初学者角度+详细注释
- Oil Deposits 石油储藏HDU
- HDU 1181 变形课 DFS基础题 初学者角度+详细注释
- hdu 1241 Oil Deposits (dfs)
- HDU-1241 Oil Deposits (DFS)
- HDU 1241 Oil Deposits (DFS)
- 【DFS】hdu:1241 Oil Deposits
- hdu 1241dfs Oil Deposits
- hdu 1241 Oil Deposits(DFS)
- HDU--1241:Oil Deposits (DFS)
- HDU 1241 Oil Deposits 【DFS】
- HDU 1241 Oil Deposits(dfs)
- HDU 1241 -- Oil Deposits (dfs)
- HDU 1241--Oil Deposits【DFS】
- HDU 1241 Oil Deposits(DFS)
- [dfs]HDU 1241 Oil Deposits
- HDU 1241 Oil Deposits DFS
- DFS-HDU-1241-Oil Deposits
- JSP内置对象
- java断点续传
- 阅读徐宜生《Android群英传》的笔记——第1章 Android系统与系统架构
- 【Hibernate】关于hibernate的缓存使用
- 学习笔记:android中Handler异步消息处理机制
- HDU 1241 DFS基础题 Oil Deposits石油储藏 以初学者角度+详细注释
- python的‘’_ ‘’用法
- 关于更博的问题
- 深入浅出-话属性
- PrintWriter用法简析
- javascript实现常见的算法
- Hadoop安装
- C++——复制构造函数的形参为什么要是const引用
- 解决 eclipse 启动报错 org.eclipse.ui.ide.multiFilter