题目连接

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. js dom学习

    创建dom元素 var oLi = document.creteElement('li'); //创建livar aLi = oUl.getElementsByTagName('li');oLi.in ...

  2. angular 调用element的 onfocus onkeydown onblur等事件

    项目里要实现一个input验证通过就切换到下一个input的功能 当然用jq dom操作很简单  ,大家都懂,现在用 angular,mvc 数据模型控制分离,不想再dom操作怎么办 以下方法 < ...

  3. 数据库性能优化之SQL语句优化(下)

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最 ...

  4. Handler,Looper,HandlerThread浅析

    Handler想必在大家写Android代码过程中已经运用得炉火纯青,特别是在做阻塞操作线程到UI线程的更新上.Handler用得恰当,能防止很多多线程异常. 而Looper大家也肯定有接触过,只不过 ...

  5. BZOJ1226 SDOI2009学校食堂(状压dp)

    由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ...

  6. 【刷题】BZOJ 3626 [LNOI2014]LCA

    Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. ...

  7. Nginx 线上配置实例

    1 /etc/nginx/nginx.conf,在主配置下设置 /etc/nginx/conf.d/*.conf user nginx;worker_processes 1; error_log /v ...

  8. 【ZJOI 2018】线图(树的枚举,hash,dp)

    线图 题目描述 九条可怜是一个热爱出题的女孩子. 今天可怜想要出一道和图论相关的题.在一张无向图 $G$ 上,我们可以对它进行一些非常有趣的变换,比如说对偶,又或者说取补.这样的操作往往可以赋予一些传 ...

  9. java类加载详解

    1,类的加载过程: JVM将类加载过程分为三个步骤:装载(load),链接(link)和初始化(initialize),其中链接又分为三个步骤: 验证(varification),准备(Prepara ...

  10. 【codeforces gym】Increasing Costs

    Portal --> Increasing Costs Description 给你一个\(n\)个点无重边无自环的无向连通图,每条边有一个边权,对于每一条边,询问去掉这条边之后有多少个点到\( ...