有一天小明爱上看动画片“喜洋洋与灰太狼” ,但是小明的妈妈不喜欢让小明看动画片,因为小明一看动画片就不认真做作业,于是妈妈就给小明出了难题:小明的姥姥家的后院养着一群羊,有一天姥姥由于疲劳睡着了,这时一群饿狼钻进了后院开始攻击羊群,后院是由许多个方格构成的长方形区域,每个方格中用字符‘.’表示空地, ‘#’表示栅栏, ‘o’表示羊, ‘v’表示狼,羊和狼所在的格子都是空地。如果从一个空地 A 沿着水平方向或垂直方向经过一系列的空地能够到达空地 B,则称空地 A 和空地 B 属于同一个羊圈。对于能够逃离后院的空地我们认为它不属于任何一个羊圈。

当一个羊圈中羊的数量大于狼的数量时,它们会用它们的尖角顶死该羊圈中的狼,否则就将被狼吃掉,最后每个羊圈中只会剩下一种动物。请你写程序帮小明计算一下, 战斗结束后所有羊圈中羊的总数和狼的总数?不然小明就再也不能看“喜羊羊与灰太狼了” 。

输入格式:

第一行包含两个用空格隔开的自然数 R 和 C,R 表示小明姥姥家家后院的行数,C 表示列数,接下来的 R 行每行包含 C 个字符,每个字符表示一个格子的情况。

输出格式:

仅一行,包含两个用一个空格隔开的整数,表示剩余羊的数量和狼的数量。

限制:

30%的数据,R,C<=30, 100%的数据,3<=R,C<=250

样例 1 :

输入:
9 12
.###.#####..
#.oo#...#v#.
#..o#.#.#.#.
#..##o#...#.
#.#v#o###.#.
#..#v#....#.
#...v#v####.
.####.#vv.o#
.......####.
输出:
3 5
#include <stdio.h>int  n,m,step1,step2;
char a[251][251];
char book[251][251];//标记数组
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//创建方向数组如next[0][0]代表
void dfs(int x,int y)                       //向右x+0,next[0][1]y+1;
{int i,j,tx,ty;if(a[x][y]=='o')//判断是否为羊 step1++;if(a[x][y]=='v')//判断是否为狼 step2++;for(i=0;i<4;i++)//分别对四个方向搜索 {tx=next[i][0]+x;ty=next[i][1]+y;if(tx<0||tx>n-1||ty<0||ty>m-1)//如果越界则所有计数归零并跳出 {step1=0;step2=0;return ;}if(book[tx][ty]==0&&a[tx][ty]!='#')//如果这个点符合条件 {book[tx][ty]=1;//标记 dfs(tx,ty);a[tx][ty]='#';//搜索后将此点更新为栅栏,防止后续再搜此点 book[tx][ty]=0;//解除标记 }}return ;
}int main()
{int i,j,t1=0,t2=0;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%s",a[i]);for(i=1;i<n-1;i++){for(j=1;j<m-1;j++){if(a[i][j]!='#'){step1=0;//代表一次搜索羊和狼的数量 step2=0;book[i][j]=1;dfs(i,j);if(step1>step2)t1+=step1;elset2+=step2;}}}printf("%d %d\n",t1,t2);return 0;
} 

测题网站:https://www.acoj.com/problems/12101

喜羊羊与灰太狼——深度优先搜索相关推荐

  1. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

  2. 深度优先搜索_0基础学算法 搜索篇第一讲 深度优先搜索

    0基础学算法 搜索篇第一讲 深度优先搜索 相信绝大多数人对于深度优先搜索和广度优先搜索是不会特别陌生的,如果我这样说似乎你没听说过,那如果我说dfs和bfs呢?先不说是否学习过它们,至少它们的大名应该 ...

  3. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南

    leetcode dfs Have you ever solved a real-life maze? The approach that most of us take while solving ...

  4. 【ACM】杭电OJ 1241(深度优先搜索小结)

    题目链接:杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一.它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解. ...

  5. matlab bfs函数,matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)

    如此经典的算法竟一直没有单独的实现过,真是遗憾啊. 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过. 这次单独的将两个算法实现出来,因 ...

  6. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解

    采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...

  7. networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...

    在开始今天的话题之前,我们先了解一个概念,什么是图的遍历? 图的遍历就是从图中某一点出发访遍图中其余剩余定点,且每个顶点仅被访问一次,这个过程叫做图的遍历. 图的遍历主要被分为深度优先遍历和广度优先遍 ...

  8. 优先深度搜索判断曲线相交_程序员必知的十大基础实用算法之-DFS(深度优先搜索)...

    深度优先搜索 深度优先搜索是一种在开发爬虫早期使用较多的方法.它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) .在一个HTML文件中,当一个超链被选择后,被链接的HTML文件 ...

  9. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...

    度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...

最新文章

  1. class转java_[拒绝套路,纯干货]这一百多道 Java 基础问题你掌握了吗?
  2. pythonos模块修改文件名_python如何动态改变文件名
  3. VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略
  4. Java 网关-Servlet Gateway
  5. stringBuffer、StringBuilder、排序、Arrays、Jdk1.5新特性(java基础知识十三)
  6. windows修改时间服务器,在Windows中设置时间服务器 2012 R2
  7. ECMAScript Decorators---装饰器
  8. 第四单元和课程总结:简单的架构设计意识
  9. 图像的放大与缩小——双线性插值放大与均值缩小
  10. lintcode :最长公共前缀
  11. java类加载器和父类委托机制
  12. 数据库课程设计报告(仓库管理系统)
  13. 分享:绘图不可不知的CAD经典技巧
  14. 使用PS改变背景为透明
  15. 会议室管理前端页面_多媒体会议室,会议系统,指挥控制中心,调度中心方案设计方案...
  16. 基于画布的手绘风格图形库 Rough.js
  17. Python查找特定名称文件
  18. Scratch少儿编程教培系统源码下载
  19. 计算机网络可用主机地址数量怎么算,子网数目及子网主机数计算
  20. 可视化|东京奥运会可视化(二)

热门文章

  1. #Op Jerusalem(耶路撒冷活动)之奇妙过程记载: 我裤子都脱了你给我看这个?
  2. 《机器人构建实战》——1.4 典型机器人
  3. tomcat启动错误Error deploying web application directory
  4. python c++情侣网名是什么意思_“果然,他用的是情侣网名!”
  5. ecu根据什么信号对点火提前角_汽车ECU现状及发展趋势
  6. 简单开发的android阅读器源码,包含了读取数据库和文件流处理功能
  7. MySQL之LIST和LIST COLUMNS分区初探
  8. vue2和vue3 面试题
  9. 在这个产品同质化比较严重的时代,这个局怎么破?
  10. 基于uniapp开发的聊天界面