DFS入门的一道经典题目:LakeCounting

用栈或队列来实现:

  1. #include<cstdio>
  2. #include<stdlib.h>
  3. #include<iostream>
  4. #include<stack>
  5. using namespace std;
  6. int n,m;
  7. int pla[10][3]={{1,0},{1,1},{1,-1},{-1,-1},{-1,0},{-1,1},{0,-1},{0,1}};//对坐标进行移动的向量
  8. struct place
  9. {
  10. int x,y;
  11. };//用结构体表示坐标
  12. char a[105][105];
  13. //核心部分DFS
  14. void DFS(int i,int j)
  15. {
  16. place begin,between;
  17. stack<place>s;//stack的类型是坐标place
  18. begin.x=i;
  19. begin.y=j;//从(i,j)开始搜索
  20. s.push(begin);//存入s
  21. while(!s.empty())//为空搜索结束
  22. {
  23. begin=s.top();//提出栈顶进行搜索
  24. s.pop();
  25. for(i=0;i<8;i++)
  26. {
  27. between.x=begin.x+pla[i][0];
  28. between.y=begin.y+pla[i][1];//加上坐标
  29. if(between.x>=0 && between.x<=n && between.y>=0 && between.y<=m && a[between.x][between.y]=='W')//在草地的范围内且是水
  30. {
  31. s.push(between);//入栈
  32. a[between.x][between.y]='.';//改成‘.’防止重复判断
  33. }
  34. }
  35. }
  36. }
  37. int main()
  38. {
  39. int i,j,k,t=0,sum=0;
  40. scanf("%d%d",&n,&m);
  41. getchar();
  42. for(i=1;i<=n;i++)
  43. {
  44. for(j=1;j<=m;j++)
  45. {
  46. scanf("%c",&a[i][j]);
  47. }
  48. getchar();
  49. }
  50. for(i=1;i<=n;i++)
  51. {
  52. for(j=1;j<=m;j++)
  53. {
  54. if(a[i][j]=='W')
  55. {
  56. DFS(i,j);
  57. sum++;//调用几次DFS即是水潭的个数
  58. }
  59. }
  60. }
  61. printf("%d\n",sum);
  62. return 0;
  63. }

用栈来实现深度优先搜索。

大概的思路我用伪代码来解释:

  1. 伪代码:
  2. void DFS(传入刚开始坐标)
  3. {
  4. stack<坐标>s;
  5. 坐标begin,between.
  6. begin存刚刚开始的坐标;
  7. begin入栈;
  8. while(s不为空)//s为空时停止搜索
  9. {
  10. 坐标begin=栈顶坐标;
  11. 栈顶坐标出栈,开始搜索。
  12. for(遍历八个搜索向量)
  13. {
  14. begin+搜索向量;
  15. if(此时搜索到了水坑)
  16. {
  17. begin+搜索向量入栈(即此时搜索到的坐标);
  18. 被搜索到的这个坐标标记为土地;
  19. }
  20. }
  21. }
  22. }

2016/3/10

深度优先搜索初尝试-DFS-LakeCounting POJ No.2386的更多相关文章

  1. 【算法导论】图的深度优先搜索遍历(DFS)

    关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...

  2. 深度优先搜索之小z的房子与验证码识别

    题目:小z的房子 高级语言程序设计实践题目:2.4 小z 的房子 ★实验任务 小z 通过自己的努力,终于发家致富.现在小明有一个大小为N*M 的 院子,雨后积起了水.四联通的积水被认为是连接在一起的. ...

  3. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  4. 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)

    从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...

  5. 用深度优先搜索(DFS)解决多数图论问题

    前言 本文大概是作者对图论大部分内容的分析和总结吧,\(\text{OI}\)和语文能力有限,且部分说明和推导可能有错误和不足,希望能指出. 创作本文是为了提供彼此学习交流的机会,也算是作者在忙碌的中 ...

  6. 【算法入门】深度优先搜索(DFS)

    深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...

  7. 图的遍历之深度优先搜索(DFS)

    深度优先搜索(depth-first search)是对先序遍历(preorder traversal)的推广.”深度优先搜索“,顾名思义就是尽可能深的搜索一个图.想象你是身处一个迷宫的入口,迷宫中的 ...

  8. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  9. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

随机推荐

  1. [目标检测]SSD原理

    1 SSD基础原理 1.1 SSD网络结构 SSD使用VGG-16-Atrous作为基础网络,其中黄色部分为在VGG-16基础网络上填加的特征提取层.SSD与yolo不同之处是除了在最终特征图上做目标 ...

  2. 万恶之源 - Python基础数据类型三

    字典 字典的简单介绍 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key ...

  3. python2与python3之间的主要区别

    python2与python3之间的主要区别 print py2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印 py3:print函数,函数就以为这必须要加 ...

  4. hdu1864最大报销额(01背包)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=187#problem/G 该题要注意的就是每张单子A种类的总和不能大与600,同 ...

  5. python中 staticmethod与classmethod

    原文地址https://blog.csdn.net/youngbit007/article/details/68957848 原文地址https://blog.csdn.net/weixin_3565 ...

  6. Java中将xml文件转化为json的两种方式

    原文地址https://blog.csdn.net/a532672728/article/details/76312475 最近有个需求,要将xml转json之后存储在redis中,找来找去发现整体来 ...

  7. MVC 页面传参到另一个页面

    写法一: @{ViewData["partData"]="哇哈哈哈哈";}    @{Html.RenderPartial("~/Views/Home ...

  8. php开启mbstring扩展并设置支持utf-8编码

    前一段时间使用一个服务的接口,因为调用接口时使用的参数里面有中文,调用接口会出现异常问题,后来才明白是编码不一致的问题.然而,我本地项目开发使用的是utf-8,接口那边也是需要utf-8的,那么问题来 ...

  9. 2.TypeScript 基础入门(二)

    变量类型的那些事 1.基本注解 类型注解使用:TypeAnnotation 语法.类型声明空间中可用的任何内容都可以用作类型注解. const num: number = 123; function ...

  10. php中in_array使用注意

    可能会导致长耗时: http://www.jb51.net/article/41446.htm