抓猫

题面如下:

【 题目描述】
流浪猫布满城市的每一个角落, 非常影响市容市貌, 作为城市聘请的抓猫者, 你有一
种捕捉器, 一定可以捕捉到所有走到里面的猫, 更加幸运的是你有一个非常厉害的动物心理
学家, 他可以预测猫在不同位置的行走方向(共有东、 西、 南、 北四种情况)
为了节约经费, 问你最少需要多少个捕捉器才能把所有的猫都抓住。
【 输入格式】
输入第一行包含两个整数 N 和 M(1<=N,M<=1000),表示城市被划分成 N×M 的网格。接
下来 N 行, 每行包含 M 个字符“ E”、“ W”、“ S”、“ N” 代表东、 西、 南、 北 4 个方向, 表
示当猫在该位置的行走方向, 保证猫不会走出城市区域。
【 输出格式】
输出一个整数表示最少需要的捕捉器数。
【 样例输入输出】
D.in
3 4
SWWW
SEWN
EEEN

D.out
2
【 数据说明】
40% 1<=N,M<=4
100% 1<=N,M<=1000
【 样例说明】 捕鼠器放在( 3,4) 点和( 2,2) 点或( 2,3) 点。

这道题是一道模拟题,需要用到的技巧如下:

·枚举 ·递归(DFS)

从题意来看,这道题的题意就是求集合的数量;但在寻找集合的时候,需要进行集合的合并(※)。

我解这题只需要两个数组: 一个用来存图; 一个用作判断这块区域是否走过。

首先要解决的是如何寻找集合:

初始化[判断数组]为 TRUE,然后枚举每个点,如果没走过就 find 一遍。

如何实现集合的合并(find):

你只需要在[探索区间]的时候,遇到一个已经走过的,那么可以直接退出,且ANS 不需要加一。这是因为对于当前的集合来说,已经遇到了[另一个集合]。这时,如果继续往下走,就会走与之前集合一样的路,但这两个集合是要合并的,所以没有必要继续走下去。

code

if(find(i,j)==)ans++;

void find(int x,int y)
{
if(b[x][y]!=)
{
if(b[x][y]==cnt){ans++;return;}
else return ;
}
b[x][y]=cnt;
if(a[x][y]=='E')find(x,y+);
if(a[x][y]=='W')find(x,y-);
if(a[x][y]=='N')find(x-,y);
if(a[x][y]=='S')find(x+,y);
}

时间复杂度:O(N*M)

抓猫_KEY的更多相关文章

  1. 一个抓猫的游戏 消遣GAME 持续更新中!

    一个抓猫的游戏 版本 Catch_Cat_V0.30 https://files-cdn.cnblogs.com/files/send-off-a-friend/Catch_Cat_V0.3.rar ...

  2. BZOJ1001_狼抓兔子_KEY

    题目传送门 由题意得是最小割问题,又由最大流最小割定理可得只需要求无向图的最大流即可. 建双向边,跑Dinic,EK会超时. 注意在DFS时要加"if(!res)dist[now]=0;&q ...

  3. C++常用特性原理解析

    在我的早期印象中,C++这门语言是软件工程发展过程中,出于对面向对象语言级支持不可或缺的情况下,一群曾经信誓旦旦想要用C统治宇宙的极客们妥协出来的一个高性能怪咖. 它驳杂万分,但引人入胜,出于多(mi ...

  4. 【转】Android各大发布市场

    前言 如果只有一个或者少许的两三个Android市场,本文也没用存在的必要性,本文谨献给同在Android奋战的同仁. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnbl ...

  5. 开发者如何利用工具快速开发出完美APP

    文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...

  6. 嵌入式OS的现状、智能的物联网与未来的机器人

    嵌入式开发是一个低调的领域.相比Web开发和企业级开发,嵌入式开发这一领域似乎很少在互联网上发出声音.随着智能设备的兴起,智能手环.手表.眼镜.灯泡等产品成为互联网企业的下一个目标,而物联网这一概念再 ...

  7. 获取技能的成功经验和关于C语言学习的调查 2015528

    内容提要 你有什么技能比大多人(超过90%以上)更好?针对这个技能的获取你有什么成功的经验?与老师博客中的学习经验有什么共通之处? 有关C语言学习的调查 你是怎么学习C语言的?(作业,实验,教材,其他 ...

  8. [ios2]BaaS服务收藏 【转】

    首先,什么是BaaS服务: BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务.SaaS(软件即服务:Software as a Servic ...

  9. Android_学习系列(33)--App应用之提交到各大市场渠道

    本文同步更新在http://hmu140482.chinaw3.com/?p=315.    Android的终端碎片化问题,是一个很讨厌的问题.    而对于国内开发者来说,Android的市场“碎 ...

随机推荐

  1. 不错的.net开源项目

    Json.NET http://json.codeplex.com/ Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Lin ...

  2. windows下编译leveldb

    前提条件,下载boost库并编译 boost库弄好后,就可以编译leveldb了 首先,下载leveldb-windows,这个github上有 一. 1文件->新建->从现有代码文件创建 ...

  3. ojdbc14_g.jar与ojdbc14.jar区别

    在低级JDK版本1.2与1.3中使用的驱动,class12.jar,虽然实际上在1.4,1.5中使用大部分情况也是OK的 ojdbc14.jar (1,545,954 bytes) - classes ...

  4. 模式:模版、样式;属于分类、识别的范围;分类、归类的标准-How are patterns obtained?

    模式及套路 模式:模版.样式:属于分类.识别的范围. How are patterns obtained? Through : re-use, classification and finally a ...

  5. 2019.1.4 SSH框架整合步骤(一)

    SSH整合 1.三大框架整合原理 Spring与Struts2整合就是将Action对象交给Spring容器负责创建 Spring与Hibernate整合就是将sessionFactory交给Spri ...

  6. Semi-Supervised Dimensionality Reduction

    今天阅读了一篇关于半监督降维的论文,做个总结.这篇论文的全名叫<Semi-Supervised Dimensionality Reduction>(2006),是南大周志华老师的大作. 本 ...

  7. mysql使用Navicat 导出和导入数据库

    系统环境: Win7 x64软件准备:Navicat Premium_11.2.7简体中文版下载网址:http://www.cr173.com/soft/419023.html 现在我就向大家介绍 m ...

  8. $Self~Problem~C~:~Samsara$

    题目背景: 在这个\(Canman\)界的人都知道,世界上最伟大的修道者 -- \(Felling\),曾经结束了\(Canman\)的无垠盏之灾,守护了\(Canman\)的和平.在无垠盏之灾的最后 ...

  9. 父窗口和iframe子窗口之间相互传递参数和调用函数或方法

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  10. Number & Math

    Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. 实例 int a = 5000; floa ...