码迷,mamicode.com
首页 > 其他好文 > 详细

变形课(DFS hdu 1181)

时间:2015-12-08 23:58:39      阅读:395      评论:0      收藏:0      [点我收藏+]

标签:

变形课

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 19133    Accepted Submission(s): 6892


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.
Hint
Hint
 
第二次做这道题,开始超时了。
提前预判要不要进行对该节点扩展,不要调用dfs然后判断改点是不是能扩展。就因为这原因超时的
15ms

 1 /*******************************
 2 
 3 Date    : 2015-12-08 21:36:48
 4 Author  : WQJ (1225234825@qq.com)
 5 Link    : http://www.cnblogs.com/a1225234/
 6 Name     : hdu 1181
 7 
 8 ********************************/
 9 #include <iostream>
10 #include <cstdio>
11 #include <algorithm>
12 #include <cmath>
13 #include <cstring>
14 #include <string>
15 #include <set>
16 #include <vector>
17 #include <queue>
18 #include <stack>
19 #define LL long long
20 using namespace std;
21 int k;
22 char ch[500][2];
23 char a[50];
24 bool flag;
25 bool vis[500];
26 void dfs(int n)
27 {
28     int i,j;
29     vis[n]=1;
30     if(ch[n][1]==m)
31     {
32         flag=1;
33         return;
34     }
35     for(i=0;i<k;i++)
36     {
37         if(ch[i][0]==ch[n][1])
38         {
39             if(vis[i])    continue;
40             dfs(i);
41             vis[i]=0;
42             if(flag)    return;
43         }
44     }
45     return;
46 }
47 int main()
48 {    
49     freopen("in.txt","r",stdin);
50     int i,j;
51     while(scanf("%s",ch[0])!=EOF)
52     {
53         int len=strlen(ch[0]);
54         ch[0][1]=ch[0][len-1];
55         for(i=1;;i++)
56         {
57             scanf("%s",a);
58             if(a[0]==0)
59                 break;
60             int len=strlen(a);
61             ch[i][0]=a[0];
62             ch[i][1]=a[len-1];
63         }
64         k=i+1;
65         flag=0;
66         memset(vis,0,sizeof(vis));
67         for(i=0;i<k;i++)
68         {
69             if(ch[i][0]==b)
70             {
71                 dfs(i);
72                 vis[i]=0;
73             }
74         }
75         printf("%s\n",flag?"Yes.":"No.");
76     }
77     return 0;
78 }

 

变形课(DFS hdu 1181)

标签:

原文地址:http://www.cnblogs.com/a1225234/p/5031229.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!