题目连接

Problem Description

呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.

Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.

Input

测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.

Output

如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)

Sample Input

so

soon

river

goes

them

got

moon

begin

big

0

Sample Output

Yes.

Harry 可以念这个咒语:"big-got-them".

分析:

成语接龙的游戏相信大家都玩过把,这道题的意思和成语接龙一样,就是要求我们以某一个字母作为一个单词的开头,然后找以这个单词的结尾的字母作为开头的另一个单词,知道找到我们要求找的那个作为结尾的单词为止。

这是搜索专题里面的一道题,刚开始的时候完全想的就是暴力走一波,试了试竟然过了。

但是毕竟是搜索专题吗,总得用搜索的方法来解决才对得起这个专题名。

暴力代码:

#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int a[26][26];
int main()
{
char s[100],i,j,k;
while (scanf(" %s",s)!=EOF)
{
if(s[0]=='0')
{
for (k=0; k<26; k++)
for (i=0; i<26; i++)
{
if (a[i][k]==1)
for (j=0; j<26; j++)
if (a[k][j]==1)
a[i][j]=1;
}
if (a[1]['m'-'a']==1)
printf("Yes.\n");
else printf("No.\n");
memset(a,0,sizeof(a));
}
else
a[s[0]-'a'][s[strlen(s)-1]-'a']=1;
}
return 0;
}

虽然个人觉得这道题用暴力的方法简单、易懂,但是还是要满足一下下搜索专题的要求的。

#include <iostream>
#include <cstring>
using namespace std; struct node
{
int v; //为1时即表示可到达 int f; //DFS中为1表示已走过 };
int prove;
node a[26][26]; //a[i][j]表示i节点到j节点
void DFS(node a[][26], int start)
{
int i;
if(prove == 1) //已证明
return ;
if(start == 12) //如果表下个开始节点为12即OK啦
{
cout << "Yes." << endl;
prove = 1;
return ;
}
for(i = 0; i < 26; i++)
if(i == start)
continue;
else
{
if(a[start][i].v == 1 && a[start][i].f == 0)
{
a[start][i].f = 1; //该节点已走过 DFS(a, i); a[start][i].f = 0; //还原该节点
}
}
return ;
}
int main()
{
char s[100];
int l, t1, t2;
memset(a, 0, sizeof(a)); //初始化全部为0
prove = 0;
while( gets(s) )
{
if(s[0] == '\0')
break; if(s[0] == '0') //为0时就进入DFS中
{
DFS(a, 1);
if(prove == 0)
cout << "No." << endl; memset(a, 0, sizeof(a)); //记得再次初始化
prove = 0;
}
else
{
l = strlen(s);
t1 = s[0] - 'a'; //转换为0--25的节点
t2 = s[l -1] - 'a';
a[t1][t2].v = 1; //t1到t2有通路
}
}
return 0;
}

HDU 1181 变形课 (深搜)的更多相关文章

  1. hdu 1181 变形课

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  2. [ACM] hdu 1181 变形课

    变形课 Problem Description 呃......变形课上Harry碰到了一点小麻烦,由于他并不像Hermione那样可以记住全部的咒语而任意的将一个棒球变成刺猬什么的,可是他发现了变形咒 ...

  3. HDOJ1181变形课 深搜回溯

    变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submissi ...

  4. hdu 1181 变形课(dfs)

    Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  5. hdu 1181:变形课(搜索水题)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  6. HDU 1181.变形课-并查集

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  7. 杭电(hdu)1181 变形课

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submi ...

  8. hdoj - 1181 变形课

    Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  9. hdu 4740【模拟+深搜】.cpp

    题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...

随机推荐

  1. 面试问题总结二(技术能力-PHP)----Ⅱ

    20.支付功能的实现? 答:在线支付一般来说有两种实现方式,一种是调用各个银行提供的接口,另一种是使用第三方集成好的支付功能,两种方式各有优劣.对于第三方支付来说会需要提交企业5证来验证,还会有部分手 ...

  2. [华三] IPv6技术白皮书(V1.00)

    IPv6技术白皮书(V1.00) http://www.h3c.com/cn/d_200802/605649_30003_0.htm H3C S7500E IPv6技术白皮书 关键词:IPv6,隧道 ...

  3. CSS 报错

  4. SpringBoot(四)_Spring Data JPA的使用

    JPA 绝对是简化数据库操作的一大利器. 概念 首先了解 JPA 是什么? JPA(Java Persistence API)是 Sun 官方提出的 Java 持久化规范.它为 Java 开发人员提供 ...

  5. 一文总结之Redis

    目录 Redis 目标 Redis简介 什么是Redis 特性 Redis当前应用情况 安装 基本使用 键 exists判断键存在性.del删除键.type键类型 expire key的时效性设置 基 ...

  6. CF271D_Good Substrings

    给一个原串,以及那些字符是坏的,现在问你可以从原串中取出多少个不同子串,使得其所含的坏字符的个数不超过一个定数. 这个题目网上有各种各样的解法.如hash,tire. 我说一下我的解法. 解法一:后缀 ...

  7. 微信小程序与java后台交互

    java后台使用的ssm框架,小程序连接的本地接口.跟正常的web访问没什么区别,也是后台获取url,返回json数据:只是小程序前台请求的url要带上http://localhost:80801. ...

  8. Business Cards UVALive - 4384(画图看图。。)

    只能由三种情况 都横着放  都竖着放  横和竖交错放 那就去判断好了... 具体看代码 #include <iostream> #include <cstdio> #inclu ...

  9. Gson获取json串中的key-value

    1.依赖包 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson& ...

  10. 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告

    P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...