题意

GeoSurvComp 地理调查公司负责发现石油存储,这次GeoSurvComp公司在一个大型矩形区域上工作,
它用一个网格分割地表,然后用可感知装备来单独分析每块小方格区域下是否包含石油,
有油的地块叫做pocket,如果俩个相邻的pocket,那么它们是相同石油存储的一部分,
石油存储能够非常大,可能会包含多个pocket,
你的任务是计算出在一个方格中有多少不同的石油存储.

输入
输入文件里包含一个或多个方格,每个方格由一行包含m,n俩个数字开头,
m是方格的行,n是列.
如果m=0代表输入结束,
要不然1 ≤ m ≤ 100,1 ≤ n ≤ 100
随后m行,每行有n个字符,每个字符代表一块地,*代表没有石油,@代表一个石油pocket

输出
对于每个网格,输出不同的石油存储,
俩个水平相邻,垂直相邻,对角线相邻的不同pocket是相同石油存储的一部分,
一个石油存储不会包含超过100pockets

样例输入
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

样例输出
0
1
2
2

BUNOJ,AC时间:60ms

  1. #include<iostream>
  2. #include <stdio.h>
  3. #include <memory.h>
  4. #include<queue>
  5. using namespace std;
  6. #define MAXR 100
  7. #define MAXC 100
  8. struct Dir
  9. {
  10. int r;
  11. int c;
  12. } dir[8] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, 1 }, { 0, -1 }, { 1, 1 }, {
  13. 1, 0 }, { 1, -1 } };
  14. void bfs(queue<Dir> q, char map[][100],int used[][100], int r, int c)
  15. {
  16. while (!q.empty())
  17. {
  18. Dir d = q.front();
  19. q.pop();
  20. for(int i = 0; i < 8; i++)
  21. {
  22. int nr = d.r + dir[i].r;
  23. int nc = d.c + dir[i].c;
  24. if(nr < 0 || nc < 0 || nr == r || nc == c||used[nr][nc]==1|| map[nr][nc] == '*' )
  25. {
  26. continue;
  27. }
  28. used[nr][nc]=1;
  29. Dir dd;
  30. dd.r=nr;
  31. dd.c=nc;
  32. q.push(dd);
  33. }
  34. }
  35. }
  36. int main()
  37. {
  38.  
  39. int r, c;
  40. while (cin >> r >> c)
  41. {
  42. if(r==0&&c==0)
  43. return 0;
  44. char map[MAXR][MAXC];
  45. int used[MAXR][MAXC];
  46. memset(used, 0, sizeof(used));
  47. memset(map, '*', sizeof(map));
  48. for(int i = 0; i < r; i++)
  49. for(int j = 0; j < c; j++)
  50. {
  51. cin >> map[i][j];
  52. }
  53. int total = 0;
  54. queue<Dir> q;
  55. Dir d;
  56. for(int i = 0; i < r; i++)
  57. for(int j = 0; j < c; j++)
  58. {
  59. if(used[i][j] == 0&&map[i][j]=='@')
  60. {
  61. total++;
  62. used[i][j]=1;
  63. d.r=i;
  64. d.c=j;
  65. q.push(d);
  66. bfs( q, map, used, r, c);
  67. }
  68. }
  69. cout<<total<<endl;
  70. }
  71. return 0;
  72. }

  

UVA-572-搜索基础题的更多相关文章

  1. C/C++笔试题(基础题)

    为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...

  2. 2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)

    这场比赛可以说是灰常的水了,涨信心场?? 今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~ 之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小 ...

  3. python每日经典算法题5(基础题)+1(中难题)

    现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ...

  4. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  5. 小试牛刀3之JavaScript基础题

    JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...

  6. 小试牛刀2:JavaScript基础题

    JavaScript基础题 1.网页中有个字符串“我有一个梦想”,使用JavaScript获取该字符串的长度,同时输出字符串最后两个字. 答案: <!DOCTYPE html PUBLIC &q ...

  7. UVa 489 HangmanJudge --- 水题

    UVa 489 题目大意:计算机给定一个单词让你猜,你猜一个字母,若单词中存在你猜测的字母,则会显示出来,否则算出错, 你最多只能出错7次(第6次错还能继续猜,第7次错就算你失败),另注意猜一个已经猜 ...

  8. UVa 1585 Score --- 水题

    题目大意:给出一个由O和X组成的串(长度为1-80),统计得分. 每个O的分数为目前连续出现的O的个数,例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3 解题思路:用一个变量t ...

  9. HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads

    双向边,基础题,最小生成树   题目 同题目     #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...

  10. UVA 572 Oil Deposits油田(DFS求连通块)

    UVA 572     DFS(floodfill)  用DFS求连通块 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format: ...

随机推荐

  1. stm32 继电器的配置

    你可以把继电器当成一个led来控制,只不过就是电路图不一样,但配置原理是一样的, 控制相对应的GPIO口,推挽输出,就行了,然后仿真一下就会发现哒哒哒的声音.

  2. 51Nod:1086背包问题 V2

    1086 背包问题 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里 ...

  3. python 取整

    1.向下取整 向下取整直接用内建的 int() 函数即可: >>> a = 3.75 >>> int(a) 3 2.四舍五入 对数字进行四舍五入用 round()  ...

  4. j2ee使用struts实现用户的登陆及注冊

    用户名: 密码: <%-- 使用struts标签 --%> <%-- --%>

  5. Xamarin版的C# SVG路径解析器

    原文:Xamarin版的C# SVG路径解析器 Xamarin版的C# SVG路径解析器,对SVG的Path路径进行解析,其中包括: 主程序SvgPathParser.cs, 相关接口定义:ISour ...

  6. webpack 遇到报错情况及解决

    webpack2 报错:optimize.OccurenceOrderPlugin is not a function. 原因:上个版本拼写错误,少写了一个字母r,新版本修正过来了.要写成这样:Occ ...

  7. C/C++基础----函数

    用实参初始化形参时会忽略掉顶层const. 尽量使用常量引用,普通引用会限制所能接受的实参类型,也会给调用者误导. 管理数组实参的3种方法: 数组本身包含一个结束标记 传递指向数组首尾元素的指针 定义 ...

  8. 【Hibernate学习笔记-6.1】无连接表的N-1关联(单向)

    作者:ssslinppp       1. 摘要 主要讲解N-1关系表的设计,N:从表,1:主表: 从表(N)中使用外键关联到主表(1),单向的: 场景: 许多人(N)可以住在同一个地方(1),知道人 ...

  9. 接口测试3-3Excel格式

    java操作Excel,需要第三方库poi #xml <dependency> <groupId>org.apache.poi</groupId> <arti ...

  10. 计算图像相似度——《Python也可以》之一

    声明:本文最初发表于赖勇浩(恋花蝶)的博客http://blog.csdn.net/lanphaday 先将两张图片转化为直方图,图像的相似度计算就转化为直方图的距离计算了,本文依照如下公式进行直方图 ...