Oil Deposits (DFS)
来源:互联网 发布:大专女生知乎 编辑:程序博客网 时间:2024/05/20 18:48
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It then analyzes each plot separately, using sensing equipment to determine whether or not the plot contains oil. A plot containing oil is called a pocket. If two pockets are adjacent, then they are part of the same oil deposit. Oil deposits can be quite large and may contain numerous pockets. Your job is to determine how many different oil deposits are contained in a grid.
Input
The input file contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise 1 <= m <= 100 and 1 <= n <= 100. Following this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*', representing the absence of oil, or `@', representing an oil pocket.
Output
For each grid, output the number of distinct oil deposits. Two different pockets are part of the same oil deposit if they are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
Sample Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample Output
0
1
2
Input
The input file contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise 1 <= m <= 100 and 1 <= n <= 100. Following this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*', representing the absence of oil, or `@', representing an oil pocket.
Output
For each grid, output the number of distinct oil deposits. Two different pockets are part of the same oil deposit if they are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
Sample Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample Output
0
1
2
2
题目大意:给你一块矩形油田,'@'代表有油,‘*’代表没油,若@与周围油地紧挨着则说这是一块油地,问你一块油田里有多少油地?
思路:这是DFS的入门题,从(0,0)开始扫,遇到油地'@'进入dfs,在dfs中向八个方向搜索,若是油地将它置为'*'或用vis数组记录这里已经搜索过了,保证下次不再搜索到这里,将它附近所有的油地都搜索完,然后置为'.' 相当于采油完毕,然后return到main继续往后扫.cnt纪录进入dfs的次数也就是油田数目。
AC代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<cstdlib>#include<queue>#include<set>#include<map>#include<vector>#include<stack>using namespace std;#define ll long longstruct NODE{ int x,y;};int m,n;char oil[105][105];int dir[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{1,-1},{-1,1},{1,1}}; //定义向周围八个方向搜索的数组 // 下 上 左 右 左下 右下 左上 右上void DFS(int i,int j){ NODE bgin; //定义开始的油地(前一个油田)的位置 bgin.x=i; bgin.y=j; queue<NODE> q; //入队 q.push(bgin); while(!q.empty()){ bgin=q.front(); q.pop(); //清除队首的位置,因为已经保存到bgin里了,在后面会以它为中心向周围搜索 for(int i=0;i<8;i++){ NODE tmp; //定义暂时想要搜索的点 tmp.x=bgin.x+dir[i][0]; tmp.y=bgin.y+dir[i][1]; if(tmp.x<0||tmp.y<0||tmp.x>=m||tmp.y>=n||oil[tmp.x][tmp.y]=='.') //若要搜索的点越界则是不合法的点 则continue continue; if(oil[tmp.x][tmp.y]=='@'){ //若是油田则入队,并将它置为‘*’ q.push(tmp); oil[tmp.x][tmp.y]='*'; } } } return ;}int main(){ while((scanf("%d%d",&m,&n)!=EOF)&&m&&n){ int cnt=0; for(int i=0;i<m;i++) scanf("%s",oil[i]); for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(oil[i][j]=='@'){ //当遇到油地时进入DFS cnt++; //油田数加一 DFS(i,j); } printf("%d\n",cnt); } return 0;}
阅读全文
0 0
- Oil Deposits(DFS)
- Oil Deposits (DFS)
- poj1562--Oil Deposits(DFS)
- HDU1241 Oil Deposits(DFS)
- hdu1241 Oil Deposits(dfs)
- Oil Deposits(dfs)HDU
- Oil Deposits(DFS深搜)
- Oil Deposits(dfs水题)
- (DFS)Oil Deposits--HDOJ
- UVA572(Oil Deposits)(DFS)
- Oil Deposits(DFS,基础题)
- UVA 572 - Oil Deposits(DFS)
- 13.04.07 Oil Deposits (DFS)
- uva572 Oil Deposits(启发DFS)
- hdu 1241 Oil Deposits(dfs入门)
- HDU 1241 Oil Deposits(DFS)
- Oil Deposits (POJ No.1562) DFS
- HDU 1241Oil Deposits(dfs搜索)
- mysql 主从复制
- 验证角谷猜想
- Zabbix搭建笔记[2]--Zabbix Agent(Client)的安装配置
- Mybatis通用Mapper
- sync 的使用
- Oil Deposits (DFS)
- 问卷调查Html5开发总结
- Java设计模式--单例模式【Singleton Pattern】
- Collections集合工具类的使用,相关方法.
- 前端特效整理
- android获取so目录的办法
- linux删除指定文件夹中某个文件除外的其他文件
- springboot上传下载
- 学术探讨|人生苦短_你用Python来做啥?