HDU1181 变形课 解题报告--dfs
2013-08-03 16:46
375 查看
变形课
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 10042 Accepted Submission(s): 3737
[align=left]Problem Description[/align]
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
[align=left]Input[/align]
测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.
[align=left]Output[/align]
如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)
[align=left]Sample Input[/align]
so soon river goes them got moon begin big 0
[align=left]Sample Output[/align]
Yes. HintHint Harry 可以念这个咒语:"big-got-them".
[align=left]Source[/align]
Gardon-DYGG Contest 1
[align=left]Recommend[/align]
JGShining
#include<iostream> #include<string> using namespace std; int mark[100]; int mx,bx,c; char maz[100][100]; int flag; void dfs(int dd)//在maz中的位置 { if(flag==1) return ;//已经成功 if(maz[dd][0]==maz[dd][1]) return;//剪枝,头尾相同的没用 if(maz[dd][1]=='m')//如果到达了标志,输出yes { cout<<"Yes."<<endl; flag=1; return ; } else //如果没成功继续搜索 { for(int i=0;i<c;i++)//对所有的咒语搜索 { int nd=i;//孩子咒语是位置移动 if(maz[dd][1]==maz[nd][0]&&mark[nd]==0&&nd<c&&nd>=0)//孩子第一个数等于母亲第二个数,孩子没被用过 { mark[nd]=1;//标记孩子走过 dfs(nd);//对孩子搜索 mark[nd]=0;//如果回溯,标记未走过 } } } return ; } int main() { char e[1001]; while(cin>>e) { c=0; memset(mark,0,sizeof(mark));//初始化路标 if(strcmp(e,"0")==0) break;//如果0结束 else strcpy(maz[c++],e);//否则记下 while(cin>>e) { if(strcmp(e,"0")==0) break; else strcpy(maz[c++],e); }//以上是接收咒语 for(int i=0;i<c;i++) { int len=strlen(maz[i]); if(len==1) { maz[i][1]=0; } else { maz[i][1]=maz[i][len-1]; maz[i][2]=0; } }//将咒语缩成只有第一最后的字符 for(i=0;i<c;i++) { if(maz[i][0]=='b')//碰到咒语开始进行搜索 { flag=0;//标志还未找到 mark[i]=1;//路标,已走过 dfs(i);//搜索 if(flag==1) break; } } if(flag==0) cout<<"No."<<endl;//如果所有的搜完了,输出NO flag=0;//这里要初始化的原因, } return 0; }
相关文章推荐
- HDU1010 Tempter of the Bone 解题报告--dfs
- pku 1691 painting a board dfs+回溯 解题报告
- HDU1181变形课 (简单深搜dfs)
- BJFUOJ 1042解题报告(DFS回溯策略总结)
- poj2488 DFS马棋环游 解题报告
- HDU1241 Oil Deposits 解题报告--dfs
- HDU1016 Prime Ring Problem 解题报告--dfs
- HDU - 1010 Tempter of the Bone 深搜模板题(DFS)解题报告
- hdu2510 符号三角形(dfs+打表) 解题报告
- poj 1011 Sticks解题报告【DFS+剪枝】
- HDU1181 变形课(DFS)
- codevs 1047 邮票面值设计 DFS+DP 解题报告
- 变形测试数据HDU1181:变形课(DFS)
- POJ - 3009 Curling 2.0解题报告(dfs)
- HDU 4582 DFS spanning tree 解题报告(贪心 & 树形DP)
- hdu 4740 The Donkey of Gui Zhou dfs 搜索 解题报告
- 八皇后问题解题报告(dfs
- hdu 3367 Pseudoforest 变形最大生成树 解题报告
- UVALive 6957 Hyacinth (DFS) -- 解题报告
- leetCode解题报告之Palindrome Partitioning I,II(DFS,DP)