HDU——1181 变形课(dfs)
2018-03-29 19:30
771 查看
Problem Description
呃……变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
Input
测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.Output
如果Harry可以完成他的作业,就输出”Yes.”,否则就输出”No.”(不要忽略了句号)Sample Input
sosoon
river
goes
them
got
moon
begin
big
0
Sample Output
Yes.**Hint
Harry 可以念这个咒语:”big-got-them”.**
解题思路:
实际上就是一个找通路的问题。题中给了许多的字符串,而每个字符串只有首尾两个字符是有用的,例如:lighton 就相当于告诉我 字符 l 和 n 之间有一条通路。
总感觉字符的比较没有数字来的方便,索性将 26 个字符用 0 ~25 来表示了(利用二维矩阵来解决问题)。
代码:
#include <cstdio> #include <string.h> using namespace std; int road[30][30]; int visited[30]; int flag ; void dfs(int v , int e){ if(v == e){ flag = 1; //flag = 1 ,表示至少能找到一条通路 return; } visited[v] = 1; for(int j = 0 ; j < 26 ; j ++){ if(road[v][j] == 1 && visited[j] == 0){ visited[j] = 1; dfs(j , e); } } } int main(){ char inca[10000]; int i , j ,start , end; start = 1; end = 12; while(scanf("%s" ,inca) != EOF){ flag = 0; memset(road , 0 ,sizeof(road)); memset(visited , 0 , sizeof(visited)); while(strcmp(inca , "0") != 0){ int t = strlen(inca); int x = inca[0] - 97; int y = inca[t - 1] - 97; road[x][y] = 1; scanf("%s" ,inca); } dfs(start , end); if(flag == 1) printf("Yes.\n"); else printf("No.\n"); } return 0; }
相关文章推荐
- hdu1181 变形课(vector容器+dfs)
- hdu 1181(dfs)变形课
- HDU 1181 变形课 DFS
- hdu 1181 变形课(dfs)
- HDU 1181--变形课【DFS】
- hdu 题目1181 变形课 (简单DFS)
- hdu 1181 变形课 (dfs- -)
- HDU 1181 变形课 (DFS)
- (step4.3.7)hdu 1181(变形课——DFS)
- HDU-1181 变形课 DFS
- HDU 1181 变形课 (dfs)
- HDU 1181 变形课 【DFS】
- hdu 1181 变形课(dfs)
- hdu 1181 变形课(DFS)
- HDU1181——变形课(dfs)
- HDU 1181变形课 (DFS)
- 【HDU】-1181-变形课(DFS)
- HDU 1181 变形课(DFS)
- HDU - 1181 变形课(dfs)
- hdu_1181_变形课(dfs)