先粘个原题:

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

题目大致意思是在一块m * n的范围内用“@”标记油田,用“ * ”标记不存在油田的位置。假如一个点被标记为油田,那么这个点的周围九宫格范围内如果还存在油田,这两个油田就是一块油田,问给出的图中油田的块数。基本思路就是先遍历,一旦找到一处油田进入BFS递归,将这个油田所在的一整块油田全部标记,计数器加一。之后遍历继续,直至每块油田均被标记,代码如下。其中注释部分是从 BJFU 1143小蝌蚪找妈妈那道题的模板挪过来的,不同之处就在于那道题只有上下左右四个方向,而这道题有八个方向。

#include

#include

using namespace std;

int a[105][105];

int n,m,ans=0,man=0;

void bfs(int i,int j)

{

if(a[i][j]==1)

{

// man++;

// if(man>ans)

// ans=man;

a[i][j]=0;

if(i-1>0) bfs(i-1,j);

if(j-1>0) bfs(i,j-1);

if(i+1<=n) bfs(i+1,j);

if(j+1<=m) bfs(i,j+1);

if(i-1>0&&j-1>0) bfs(i-1,j-1);

if(i-1>0&&j+1<=m) bfs(i-1,j+1);

if(i+1<=n&&j-1>0) bfs(i+1,j-1);

if(i+1<=m&&j+1<=m) bfs(i+1,j+1);

}

}

int main()

{

//freopen("1.txt","r",stdin);

while(cin>>n>>m&&(m||n))

{

int num = 0;

if(n == 0&&m == 0)return 0;

int i,j;

char w;

ans=0;

memset(a,0,sizeof(a));

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

{

cin>>w;

if(w=='@')

a[i][j]=1;

} //读出原图并标记

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

{

if(a[i][j]==1)

{

num++;

// man=0;

bfs(i,j);

}

}

cout<

}

return 0;

}

c语言 搜索题油田问题,HDU1241 经典油田问题(BFS)相关推荐

  1. c语言二级软件破解,C语言二级题库

    c语言二级题库是一款可以让用户在备考c语言的时候很好的进行题目训练的手机软件,使用这款软件的书可以让每一位用户都可以进行选择题的题目练习,能更好地适应考试时的选择题难度,同时这里也有相应的上机操作题以 ...

  2. c语言中c为字符型便量,c='97'是否正确,C语言判断题Word版

    <C语言判断题Word版>由会员分享,可在线阅读,更多相关<C语言判断题Word版(3页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击去 ...

  3. 语言的学习基础,100个经典的算法

    POJ上做做ACM的题 语言的学习基础,100个经典的算法 C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生 ...

  4. 大一c语言操作题期末考答案,大一期末考试c语言操作题答案

    <大一期末考试c语言操作题答案>由会员分享,可在线阅读,更多相关<大一期末考试c语言操作题答案(13页珍藏版)>请在人人文库网上搜索. 1.ball.c#include std ...

  5. arrays中copyof复制两个数组_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  6. c语言 空格_C语言100题集合-ex003

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞收藏哦- 1 题目 函数:fun() 功能:统计一行字符串单词的个数,作为函数值返回 描述:一行字符串在 ...

  7. c语言常考的编程题,C语言操作题常考编程题库

    <C语言操作题常考编程题库>由会员分享,可在线阅读,更多相关<C语言操作题常考编程题库(32页珍藏版)>请在人人文库网上搜索. 1.C语言编程题覆盖到的算法:1.个人所得税计算 ...

  8. 用指针交换两个数_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  9. char转化为cstring_C语言100题集合001-将一个数字字符串转换为一个整数

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞收藏哦- 1 题目 题目:将一个数字字符串转换为一个整数(不得调用C语言中提供的字符串函数进行操作) 例 ...

最新文章

  1. Windows Socket编程笔记之最简单的小Demo
  2. Linux 下编译并运行C++程序
  3. outlook错配置账户到exchange后的删除办法
  4. 强制禁用gitlab的双因子认证:Two-Factor Authentication
  5. Spark基础学习笔记07:搭建Spark HA集群
  6. linux复制以a开头的文件,linux部分试题
  7. 精度计算——大数阶乘
  8. 17. jQuery - css() 方法
  9. 怎么确认mysql正确安装_怎么确认mysql是否安装好了
  10. java加解密算法概述
  11. 外观检验人员一致性(Kappa)分析
  12. 利用Jupyter Notebook进行科学计算和数据分析
  13. 「镁客·请讲」小库科技何宛余:用人工智能去更高效的协助建筑设计工作
  14. LeetCode——反转链表
  15. Excel中多行一致分类序列号
  16. Tensorflow的基本使用方法
  17. sap增加税码注意事项,进项税调整SAP相应调整
  18. Java实现 蓝桥杯 算法提高 矩阵翻转
  19. 基于OCR模板匹配的手写英文字母数字识别matlab仿真
  20. 世界星载SAR发展10——RADAR1(1997,美国)

热门文章

  1. emwin自定义消息问题
  2. 深入String、StringBuilder、StringBuffer
  3. 4.1.9 OS之文件系统的层次结构
  4. react table里跳转页面_如何在react中实现一个table切换?
  5. Cpp 对象模型探索 / 含有虚基类的类的内存布局
  6. 双项通过|百度点石通过信通院「可信数据流通平台」、「联邦学习」双项测评
  7. 阿卡迪亚大学的计算机科学,阿卡迪亚大学计算机科学
  8. android 4.2 判断桌面快捷,Android 判断桌面是否快捷方式,不存在则创建
  9. vue 部门tree样式_vue+Element实现tree树形数据展示
  10. python程序练习题第三章_python核心编程-第三章-习题