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是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同 ...
随机推荐
- 第07组 Alpha冲刺(4/4)
队名:秃头小队 组长博客 作业博客 组长徐俊杰 过去两天完成的任务:学习了很多东西 Github签入记录 接下来的计划:继续学习 还剩下哪些任务:后端部分 燃尽图 遇到的困难:自己太菜了 收获和疑问: ...
- R画柱形图和箱线图
数据格式如下 gene_id Sham-1 Sham-2 Sham-3 Sham-4 Sham-5 Rep-1h-1 Rep-1h-2 Rep-1h-3 Rep-1h-4 Rep-1h-5 Rep-3 ...
- gitlab 重置密码
sudo gitlab-rails console production --------------------------------------------------------------- ...
- Prometheus入门到放弃(1)之Prometheus安装部署
规划: IP 角色 版本 10.10.0.13 prometheus-server 2.10 10.10.0.11 node_exporter 0.18.1 10.10.0.12 node_expor ...
- java war包 远程debug出现的问题解决,学会查看日志
开启远程debug之后,8005 关闭tomcat 又启动不了了.. netstat -lnp 未发现8005接口 eclipse 内远程链接到服务器,debug 下发现服务器线程启动也存在问题.很多 ...
- Struts笔记2
Struts2-配置文件result元素 作用:为动作指定结果视图 name属性:逻辑视图的名称,对应着动作方法的返回值.默认值是success type属性:结果类型,指的就是用什么方式转到定义的页 ...
- QT http请求数据
1.创建一个请求类(HttpWork): HttpWork.h头文件 #pragma once #include <QObject> #include <QNetworkAccess ...
- 用php的for循环输出四边形,各种三角形和菱形【含空心版本】
<?php // 实心版 //四边形 for( $i = 1; $i <=5; $i++ ){ for( $j = 1; $j <=5; $j++ ){ echo '*'; } ec ...
- WUSTOJ 1299: 结点选择(Java)
题目链接:
- jmu-Java-02基本语法-04-动态数组
题目: 根据输入的n,打印n行乘法口诀表.需要使用二维字符串数组存储乘法口诀表的每一项,比如存放1*1=1.为了保证程序中使用了二维数组,需在打印完乘法口诀表后使用Arrays.deepToStrin ...