hdu1181变形课(floyd)

变形课

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

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
 
Sample Output
Yes.
Hint

Hint

Harry 可以念这个咒语:"big-got-them".

题意:需要几个单词组成在一起形成以b开头,以m结尾的串,单词之间必须首尾相接

题解:可以用floyd的思想来做,把每个单词看成从第一个字母到最后一个字母直接的路长为1,不同单词之间首尾相接的特性也符合floyd算法,这样就套一下floyd,最后可以直接得到b到m的路长,这题只要求判断是否的到达。

注意:还是多组输入的,0只是一组的结束,不能直接结束程序,不然会wa

 #include<bits/stdc++.h>
using namespace std;
int maps[][];
char ch[];
const int INF = 0x3f3f3f3f;
void floyd() {
for(int k=; k<; k++) {
for(int i=; i<; i++) {
for(int j=; j<; j++) {
maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]);
}
}
}
}
int main() {
memset(maps,INF,sizeof(maps));
while(~scanf("%s",ch)) {
if(ch[]=='') {
floyd();
if(maps[][]!=INF)printf("Yes.\n");
else printf("No.\n");
memset(maps,INF,sizeof(maps));
} else {
int x=ch[]-'a';
int y=ch[strlen(ch)-]-'a';
maps[x][y]=;
}
}
return ;
}
上一篇:实习医生格蕾第一季/全集Grey’s Anatomy迅雷下载


下一篇:Twenty Newsgroups Classification任务之二seq2sparse(5)