一、题意:有三种水果分别用,'@','*','#'三种符号表示,上下左右相连的同种水果被看做是一个区域,问一共有多少个区域

二、思路:用dfs去标记相连区域,然后遍历每个没有被标记的位置进行dfs

三、代码:

  1. #include"iostream"
  2. #include"stdio.h"
  3. #include"vector"
  4. using namespace std;
  5.  
  6. const int MAXN=105;
  7.  
  8. char farm[MAXN][MAXN];
  9. int m,n,cnt;
  10.  
  11. bool IsEdge(int x,int y)
  12. {
  13. if(x>=0&&x<m&&y>=0&&y<n)
  14. return true;
  15. return false;
  16. }
  17.  
  18. bool IsSame(int x,int y,char tree)
  19. {
  20. if(farm[x][y]==tree)
  21. return true;
  22. return false;
  23. }
  24.  
  25. void Dfs(int x,int y,char tree)
  26. {
  27. int dir[]={0,1,0,-1,-1,0,1,0};
  28. for(int i=0;i<8;i+=2)
  29. {
  30. int dx=x+dir[i];
  31. int dy=y+dir[i+1];
  32. if(IsEdge(dx,dy)&&IsSame(dx,dy,tree))
  33. {
  34. farm[dx][dy]='-';
  35. Dfs(dx,dy,tree);
  36. }
  37. }
  38. }
  39.  
  40. int main()
  41. {
  42. while(cin>>m>>n,m&&n)
  43. {
  44. for(int i=0;i<m;i++)
  45. {
  46. cin>>farm[i];
  47. }
  48. cnt=0;
  49. for(int i=0;i<m;i++)
  50. {
  51. for(int j=0;j<n;j++)
  52. {
  53. if(farm[i][j]!='-')
  54. {
  55. cnt++;
  56. char tree=farm[i][j];
  57. farm[i][j]='-';
  58. Dfs(i,j,tree);
  59. }
  60. }
  61. }
  62. cout<<cnt<<endl;
  63. }
  64. return 0;
  65. }

  

aoj0118的更多相关文章

  1. 《挑战程序设计竞赛》2.1 深度优先搜索 POJ2386 POJ1979 AOJ0118 AOJ0033 POJ3009

    POJ2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25366   Accepted: ...

  2. aoj-0118 property distribution(搜索)

    Time limit1000 ms Memory limit131072 kB タナカ氏が HW アールの果樹園を残して亡くなりました.果樹園は東西南北方向に H × Wの区画に分けられ.区画ごとにリ ...

  3. 算法总结—深度优先搜索DFS

    深度优先搜索(DFS) 往往利用递归函数实现(隐式地使用栈). 深度优先从最开始的状态出发,遍历所有可以到达的状态.由此可以对所有的状态进行操作,或列举出所有的状态. 1.poj2386 Lake C ...

随机推荐

  1. IntelliJ IDEA——maven环境下整合SSM

    SSM整合目录结构 开发环境:JDK1.8:apache-tomcat-7.0.52 : MySql5.7 开发工具:IntelliJ IDEA pom.xml <?xml version=&q ...

  2. HUSTSE2017级5班3组小组JIRA软件使用体验看法汇总--未订正版

    小组JIRA软件使用体验看法汇总 小黄 JIRA还是比较方便的,在项目组合管理阶段,可以让团队同时按时发布,也可以让计划变得更容易和快捷,可以跟踪团队的重要计划,清楚的了解项目的进度. 看了JIRA的 ...

  3. Android N 新特性

    2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为“牛轧糖” 本届I/O开发者大会上,Google重点介绍了And ...

  4. 编写高质量代码改善C#程序的157个建议——建议57:实现ISerializable的子类型应负责父类的序列化

    建议57:实现ISerializable的子类型应负责父类的序列化 我们将要实现的继承自ISerializable的类型Employee有一个父类Person,假设Person没有实现序列化,而现在子 ...

  5. 编写高质量代码改善C#程序的157个建议——建议53:必要时应将不再使用的对象引用赋值为null

    建议53:必要时应将不再使用的对象引用赋值为null 在CLR托管的应用程序中,存在一个“根”的概念,类型的静态字段.方法参数.以及局部变量都可以作为“根”的存在(值类型不能作为“根”,只有引用类型的 ...

  6. 客户端 post ,get 访问服务器

    private void sendReuestExpansion() { HttpRequest<T> req = this; HttpWebRequest request; try { ...

  7. windows下安装newman

    1.下载安装node.js,下载地址::https://nodejs.org/en/download/,这里我下载的为v10.15.0-x64.msi,下载后直接安装即可,安装完后可输入node -v ...

  8. Kubernetes 集群部署(4) -- Node 部署

    以下无特殊说明,都是在 Node 节点运行 1. 创建文件 vim /opt/k8s/cfg/kubelet.conf,内容如下: KUBELET_OPTS="--logtostderr=t ...

  9. linux下Tomcat+OpenSSL配置单向&双向认证(自制证书)

    背景 由于ios将在2017年1月1日起强制实施ATS安全策略,所有通讯必须使用https传输,本文只针对自制证书,但目前尚不确定自制证书是否能通过appstore审核. 1.必须支持传输层安全(TL ...

  10. jvm学习笔记之对象详解

    一.对象的组成 对象头(Header): 运行时数据:存储对象运行时的数据,如哈希码.GC分代年龄.锁状态标志.线程持有的锁.偏向线程ID.偏向时间戳等,这部分数据官方成为“Mark Word”,它的 ...