HDU 1181 变形课 (深搜)
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 变形课 (深搜)的更多相关文章
- hdu 1181 变形课
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submis ...
- [ACM] hdu 1181 变形课
变形课 Problem Description 呃......变形课上Harry碰到了一点小麻烦,由于他并不像Hermione那样可以记住全部的咒语而任意的将一个棒球变成刺猬什么的,可是他发现了变形咒 ...
- HDOJ1181变形课 深搜回溯
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submissi ...
- hdu 1181 变形课(dfs)
Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...
- hdu 1181:变形课(搜索水题)
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submis ...
- HDU 1181.变形课-并查集
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submis ...
- 杭电(hdu)1181 变形课
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submi ...
- hdoj - 1181 变形课
Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...
- hdu 4740【模拟+深搜】.cpp
题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...
随机推荐
- js dom学习
创建dom元素 var oLi = document.creteElement('li'); //创建livar aLi = oUl.getElementsByTagName('li');oLi.in ...
- angular 调用element的 onfocus onkeydown onblur等事件
项目里要实现一个input验证通过就切换到下一个input的功能 当然用jq dom操作很简单 ,大家都懂,现在用 angular,mvc 数据模型控制分离,不想再dom操作怎么办 以下方法 < ...
- 数据库性能优化之SQL语句优化(下)
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最 ...
- Handler,Looper,HandlerThread浅析
Handler想必在大家写Android代码过程中已经运用得炉火纯青,特别是在做阻塞操作线程到UI线程的更新上.Handler用得恰当,能防止很多多线程异常. 而Looper大家也肯定有接触过,只不过 ...
- BZOJ1226 SDOI2009学校食堂(状压dp)
由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ...
- 【刷题】BZOJ 3626 [LNOI2014]LCA
Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. ...
- Nginx 线上配置实例
1 /etc/nginx/nginx.conf,在主配置下设置 /etc/nginx/conf.d/*.conf user nginx;worker_processes 1; error_log /v ...
- 【ZJOI 2018】线图(树的枚举,hash,dp)
线图 题目描述 九条可怜是一个热爱出题的女孩子. 今天可怜想要出一道和图论相关的题.在一张无向图 $G$ 上,我们可以对它进行一些非常有趣的变换,比如说对偶,又或者说取补.这样的操作往往可以赋予一些传 ...
- java类加载详解
1,类的加载过程: JVM将类加载过程分为三个步骤:装载(load),链接(link)和初始化(initialize),其中链接又分为三个步骤: 验证(varification),准备(Prepara ...
- 【codeforces gym】Increasing Costs
Portal --> Increasing Costs Description 给你一个\(n\)个点无重边无自环的无向连通图,每条边有一个边权,对于每一条边,询问去掉这条边之后有多少个点到\( ...