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
题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...
随机推荐
- PHP 内置函数strlen 和mbstring扩展函数mb_strlen的区别
#EXAMPLE $str_uncode = "简体中文Chinese(Simplified)"; //统计字符串长度 echo strlen($str_uncode).'< ...
- MSTSC 修改端口的简单方法 3389
1. 3389端口太过危险 最简单的办法是 修改默认端口方法非常简单. 2. win+r 打开运行, 输入 regedit 打开 注册表 3. 在地址栏输入 远程的服务的路径 输入的内容为: 计算机 ...
- [转帖学习]Howto Shrink a Thin Provisioned Virtual Disk (VMDK)
Howto Shrink a Thin Provisioned Virtual Disk (VMDK) Posted by fgrehl on November 24, 2014Leave a com ...
- es6 const关键字
const是constant(常量)的缩写,const和 let一样,也是用来声明变量的,但是const是专门用于声明一个常量的,顾名思义,常量的值是不可改变的.以前用var声明的变量,想怎么改就怎么 ...
- linux下 XGCOM串口助手的安装
源码下载:http://code.google.com/p/xgcom/ 也可以自己搜索下载 首先先安装依赖库,直接运行命令 #sudo apt-get install libglib2.0- ...
- 机器学习经典论文/survey合集
Active Learning Two Faces of Active Learning, Dasgupta, 2011 Active Learning Literature Survey, Sett ...
- java递归方法求数组最大元素
一直对递归写法不是很熟悉,特写一个增进理解 /** * Created by Administrator on 2017-11-01. */ public class recursion { priv ...
- 域hash值破解的总结经验
1.vsssown.vbs拷贝域数据库: 1.1上传vssown.vbs文件 上传cscript.exe和vssown.vbs到域服务器上 1.2创建快照 reg query HKEY_LOCAL_M ...
- 遇到问题----gradle-----myeclipse的gradle插件导入项目报错nsupported major.minor version 51.0
装好了gradle插件之后 想要导入gradle类型的项目,然后在 build model的过程中发现: 报错nsupported major.minor version 51.0 查了下发现是jdk ...
- Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度
Levenshtein Distance莱文斯坦距离定义: 数学上,两个字符串a.b之间的莱文斯坦距离表示为levab(|a|, |b|). levab(i, j) = max(i, j) 如果mi ...