HDU - 5706 - Girlcat - 简单搜索 - 新手都可以看懂的详解
原题链接:
大致题意:给你一个二维字符串,可以看成图;再给两个子串“girl”和“cat”,求图中任意起点开始的不间断连接起来的字母构成的两个子串的分别的个数;连接的方向只有不间断的上下左右。
搜索函数:
void dfsgirl(int i, int j,int k);
//第一层(i1,j1, k=0)时,k=0表示(i1,j1)上是g,然后枚举四个方位找到i——进入第二层
//第二层(i2,j2, k=1)时,k=1表示(i2,j2)位置上是字母i(并且该位置与i1,j1相邻,这是为什么?),然后枚举四个方位找到r——进入第三层
//第三层(i3,j3,k=2),k=2表示(i3,j3)位置上是字母r(并且该位置与i2,j2相邻,为什么?)然后枚举四个方位找到l——进入第四层
//第四层(i4,j4,k=3),找到l就要停下来了,直接记录结果并范围上一层,接着执行下一个方位的dfs。(为什么这时可以停下了呢?因为dfs都是环环相扣的,前面的解都是合理的,然后推出后面的解;再后面的解以此为基础,再往下搜索!)
void dfscat(int i, int j,int k);
道理同上,自己照葫芦画瓢可以写写就懂得差不多了。
//main函数里确保了每个起点不同,并且每个字符串不是回文字符串,所以确保不会走重复的!自己举个栗子试试!
//再看不懂就直接去动手画画推推好了,或者调试吧!单步调试可以清晰直接地看出机器的逻辑!
没有思路就不要盲目做题。抄代码是一种不好的习惯,代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
void dfscat(int i, int j,int k);
void dfsgirl(int i, int j,int k);
#define N 1010
char str[N][N];
char s1[]= "girl"; //声明需要查找的字符串
char s2[]= "cat";
int m,n,sum,num,k,p;
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
sum=; //girl的数量
num=; //cat的数量
k=;
p=;
memset(vis,,sizeof(vis));
scanf("%d%d",&n,&m);
for(i=; i<n; i++) //存贮一整个图
scanf("%s",str[i]);
for(i=; i<n; i++)
for(j=; j<m; j++)
{
if(str[i][j]=='g')
dfsgirl(i,j,);
if(str[i][j]=='c')
dfscat(i,j,);
}
printf("%d %d",sum,num);
printf("\n");
}
return ;
} //第一层(i1,j1,k=0)时,k=0表示(i1,j1)上是g,然后枚举四个方位找到i——进入第二层
//第二层(i2,j2,k=1)时,k=1表示(i2,j2)位置上是字母i(并且该位置与i1,j1相邻,这是为什么?),然后枚举四个方位找到r——进入第三层
//第三层(i3,j3,k=2),k=2表示(i3,j3)位置上是字母r(并且该位置与i2,j2相邻,为什么?)然后枚举四个方位找到l——进入第四层
//第四层(i4,j4,k=3),找到l就要停下来了,直接记录结果并范围上一层,接着执行下一个方位的dfs。(为什么这时可以停下了呢?因为dfs都是环环相扣的,前面的解都是合理的,然后推出后面的解;再后面的解以此为基础,再往下搜索!) //main函数里确保了每个起点不同,并且每个字符串不是回文字符串,所以确保不会走重复的!自己举个栗子试试! //再看不懂就直接去动手画画推推好了,或者调试吧!单步调试可以清晰直接地看出机器的逻辑! void dfsgirl(int i, int j,int k) //k表示当前步要搜索s1[4]=“girl”的下标
{
if(i<||j<||i>=n||j>=m)
return;
else
{
if(str[i][j]==s1[k])
{
if(k==) //找到最后一个字母
{
sum++;
return ;
}
dfsgirl(i-,j,k+);
dfsgirl(i,j-,k+);
dfsgirl(i+,j,k+);
dfsgirl(i,j+,k+);
}
}
return ;
} void dfscat(int i, int j,int k) ////k表示当前步要搜索s2[3]=“cat”的下标
{
if(i<||j<||i>=n||j>=m)
return;
else
{
if(str[i][j]==s2[k])
{
if(k==) //找到最后一个字母
{
num++;
return ;
}
dfscat(i-,j,k+);
dfscat(i,j-,k+);
dfscat(i+,j,k+);
dfscat(i,j+,k+);
}
}
return ;
}
HDU - 5706 - Girlcat - 简单搜索 - 新手都可以看懂的详解的更多相关文章
- 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务
来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...
- 新手也能看懂的 SpringBoot 异步编程指南
本文已经收录自 springboot-guide : https://github.com/Snailclimb/springboot-guide (Spring Boot 核心知识点整理. 基于 S ...
- 小学生都能看懂的FFT!!!
小学生都能看懂的FFT!!! 前言 在创新实践重心偷偷看了一天FFT资料后,我终于看懂了一点.为了给大家提供一份简单易懂的学习资料,同时也方便自己以后复习,我决定动手写这份学习笔记. 食用指南: 本篇 ...
- 55张图吃透Nacos,妹子都能看懂!
大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第1篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...
- 机器学习敲门砖:任何人都能看懂的TensorFlow介绍
机器学习敲门砖:任何人都能看懂的TensorFlow介绍 http://www.jiqizhixin.com/article/1440
- 只要听说过电脑的人都能看懂的网上pdf全书获取项目
作者:周奇 最近我要获取<概统>的教材自学防挂科(线代已死),于是我看到 htt链ps:/链/max链.book接118接.com接/html/2018/0407/160495927.sh ...
- 搭建分布式事务组件 seata 的Server 端和Client 端详解(小白都能看懂)
一,server 端的存储模式为:Server 端 存 储 模 式 (store-mode) 支 持 三 种 : file: ( 默 认 ) 单 机 模 式 , 全 局 事 务 会 话 信 息 内 存 ...
- 小学生都能看懂的数位dp
前言 数位dp其实很久前就知道了,也做过几道和其他算法混在一起的题目,其实通过手玩是能做的 但毕竟是种算法,还是系统学下比较好(节省手玩时间) 模板题 P2602 [ZJOI2010]数字计数 化简题 ...
- 谁都能看懂的单点登录(SSO)实现方式(附源码)
SSO的基本概念 SSO英文全称Single Sign On(单点登录).SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同 ...
随机推荐
- nodejs中利用expresss脚手架和bootstrap,数据库mongodb搭建的留言板案例
## 1. 先打开编辑器,创建一个项目 ## 2. 再打开cmd命令提示符下载express脚手架 express 项目名 --view=ejs 或express -e 项目名 ## ...
- SPSS 2019年10月24日 今日学习总结
2019年10月24日今日课上内容1.SPSS掌握基于键值的一对多合并2.掌握重构数据3.掌握汇总功能 内容: 1.基于键值的一对多合并 合并文件 添加变量 合并方法:基于键值的一对多合并 变量 2. ...
- Java注解-注解处理器、servlet3.0|乐字节
大家好,我是乐字节的小乐,上次给大家带来了Java注解-元数据.注解分类.内置注解和自定义注解|乐字节,这次接着往下讲注解处理器和servlet3.0 一.注解处理器 使用注解的过程中,很重要的一部分 ...
- 【剑指offer】面试题 42. 连续子数组的最大和
面试题 42. 连续子数组的最大和 NowCoder 题目描述 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值. 示例: 输入: [-2,1 ...
- 【算法】js实现最短时间走完不同速度的路程
题目: 现在有一条公路,起点是0公里,终点是100公里.这条公路被划分为N段,每一段有不同的限速.现在他们从A公里处开始,到B公里处结束.请帮他们计算在不超过限速的情况下,最少需要多少时间完成这段路程 ...
- STM32之SPI时钟相位选择
SPI的时钟模式分为四种,由SPI_CR1寄存器的两位CPOL,CPHA组合选择. CPOL 如果为1,则时钟的空闲电平为高电平:CPOL 如果为0,则时钟的空闲电平为低电平.空闲电平影响不大. CP ...
- 通过tushare获取股票价格
# Author llll # coding=utf-8 # ---描述# 完成股票 价格查询和展示# 不直接根据网页进行爬虫获取股票价格,而是通过已有组件查询股票价格,并保存到csv文件或者exce ...
- Python--类的定义与使用
转载自https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868200407 ...
- springboot基础、注解等
SpringBoot 1.springboot概念 Spring Boot是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...