Oil Deposits

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 32337    Accepted Submission(s): 18765

Problem Description
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
2
 
Source
 
Recommend
Eddy   |   We have carefully selected several similar problems for you:  1240 1181 1253 1072 1175 
DFS求连通块就行了,但是注意是八个方向的,我用了方向数组和for循环,想想自己当初是不是傻,手写八个DFS。。。
 
       
Problem :
1241 ( Oil Deposits )     Judge Status :
Accepted

RunId : 21282350    Language : G++    Author :
hnustwanghe
Code Render Status :
Rendered By HDOJ G++ Code Render Version 0.01 Beta

#include<iostream>
#include<cstring>
#include<cstdio>

using namespace std;
const int N = 100 + 5;
char mat[N][N];
bool visit[N][N];
int n,m;
const int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}};

void DFS(int x,int y){
if(x<0 || x>=n || y<0 || y>=m || visit[x][y] || mat[x][y]!='@') return ;
visit[x][y] = true;
for(int d=0;d<8;d++){
int newx = x + dir[d][0];
int newy = y + dir[d][1];
DFS(newx,newy);
}
}
int solve_question(){
memset(visit,0,sizeof(visit));
int cnt = 0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(!visit[i][j] && mat[i][j]=='@'){
DFS(i,j);
cnt++;
}
}
return cnt;
}
int main(){
while(scanf("%d %d",&n,&m)==2&&(n||m)){
for(int i=0;i<n;i++)
scanf("%s",mat[i]);
printf("%d\n",solve_question());
}
return 0;
}

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 100 + 5;
char mat[N][N];
bool visit[N][N];
int n,m;
const int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}};

void DFS(int x,int y){
if(x<0 || x>=n || y<0 || y>=m || visit[x][y] || mat[x][y]!='@') return ;
visit[x][y] = true;
for(int d=0;d<8;d++){
int newx = x + dir[d][0];
int newy = y + dir[d][1];
DFS(newx,newy);
}
}
int solve_question(){
memset(visit,0,sizeof(visit));
int cnt = 0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(!visit[i][j] && mat[i][j]=='@'){
DFS(i,j);
cnt++;
}
}
return cnt;
}
int main(){
while(scanf("%d %d",&n,&m)==2&&(n||m)){
for(int i=0;i<n;i++)
scanf("%s",mat[i]);
printf("%d\n",solve_question());
}
return 0;
}

最新文章

  1. svn比对
  2. 访问外网 ML2 的配置 - 每天5分钟玩转 OpenStack(103)
  3. sql操作
  4. Vue 为什么在 HTML 中监听事件?
  5. SQLServer 维护脚本分享(11)部分DBCC及系统存储过程
  6. 纯js分页代码(简洁实用)
  7. POJ 1182 食物链(种类并查集)
  8. Poj OpenJudge 百练 2389 Bull Math
  9. bzoj1072
  10. poj 1007 纯水题 排序
  11. Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列
  12. 11 Linear Models for Classification
  13. 浅谈this关键字
  14. promisify,promisifyAll,promise.all实现原理
  15. tail -f 报错 file truncated
  16. linux符号与正则表达式
  17. windows程序设计 MessageBox消息框
  18. SDI视频采集过程
  19. Outlook数据提取工具readpst
  20. MetaPost使用

热门文章

  1. CSS设置背景色
  2. sql 查询 某字段是否重复
  3. ThoughtWorks.QRCode 生成二维码名片(实现二维码内容换行)
  4. ROM和RAM的内存详细说明
  5. 30 分钟理解 CORB 是什么
  6. 【BZOJ2521】 [Shoi2010]最小生成树
  7. Mybatis学习笔记之---CRUD(增删改查)
  8. [CSP-S模拟测试]:123567(莫比乌斯函数+杜教筛+数论分块)
  9. ali之monkey学习
  10. SQL server 安装教程