石油探测(DFS)
来源:互联网 发布:常州淘宝网络公司 编辑:程序博客网 时间:2024/06/10 07:35
题目:
Description
地质探测公司负责探测地下石油资源,每次在一块矩形的区域上查找。探测人员用把这块矩形区域分成 了N X M个正方形小块,然后对每个正方形小块分别进行分析,经过分析之后,为每个小块都做了一个标记,如果一个小块地下发现有石油,则用“@”标记,否则用”.标记”。如果两个含有石油的小块是相邻的,那么它们属于同一块石油地,这里的相邻包括水平,垂直,或者对角相邻。给定一块已经标记过的矩形区域,你的任务是找出这块区域上的石油地的个数
Input
本题有多组输入数据。对于每一组输入数据,第一行输入两个数M,N,(1<=M,N<=100),接下来是M行,每行含有N个字符,每个字符要么是“@”,要么是”*”。
Output
对于每组数据,输出一行,包含一个整数,它表示石油的地块数
Sample Input
OriginalTransformed1 1*3 5*@*@***@***@*@*1 8@@****@*5 5 ****@*@@*@*@**@@@@*@@@**@0 0
Sample Output
OriginalTransformed0122
分析:直接dfs把相连的@全部变成*。
代码:
#include<iostream>#include<cstdio>#include<queue>#include<string>#include<cstring>using namespace std;int book[120][120],sumint next1[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};char num[120][120];int n,m;void dfs(int x,int y){ int tx,ty; num[x][y]='*'; for(int k=0;k<8;k++) { tx=x+next1[k][0]; ty=y+next1[k][1]; if(tx<0||tx>=n||ty<0||ty>=m) continue; if(num[tx][ty]=='@'&&book[tx][ty]==0) { book[tx][ty]=1; dfs(tx,ty); } } return ;}int main(){ while(~scanf("%d%d",&n,&m)) { sum=0; memset(book,0,sizeof(book)); for(int i=0;i<n;i++) scanf("%s",num[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(num[i][j]=='@') { sum++; book[i][j]=1; dfs(i,j); } printf("%d\n",sum); } return 0;}
0 0
- 石油探测(DFS)
- DFS 搜索 Problem 1011 Oil Deposits 探索石油储量
- HDU 1241 DFS基础题 Oil Deposits石油储藏 以初学者角度+详细注释
- 石油污染
- 石油套管
- 石油知识
- 石油合并
- 找石油
- 一桶石油有多少
- 美元與石油
- 中石油最赚钱
- 中石油网上申购
- 中石油中签公布
- 中石油中签号码
- 石油和信息
- 洛克菲勒:石油大王
- 中石油裁员
- 延长石油内幕
- 性能优化新思路
- 看懂UML类图和时序图
- 如何看懂这些"该死的"图形学公式
- 微软认知服务开发实践(3) - 人脸识别
- NYOJ-日期计算
- 石油探测(DFS)
- 为什么Fastjson能够做到这么快?
- 库函数与系统调用
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
- android6.0/sdk23版本的AsyncHttpClient框架的使用
- [leetcode]107. Binary Tree Level Order Traversal II
- JavaScaript和CSS
- 338. Counting Bits
- JAVA批处理修改图片名称