变形课 简单搜索
来源:互联网 发布:自动配餐王软件 编辑:程序博客网 时间:2024/05/22 17:43
变形课
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 9 Accepted Submission(s) : 5
Problem Description
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体. Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
Input
测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.
Output
如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)
Sample Input
sosoonrivergoesthemgotmoonbeginbig0
Sample Output
Yes.[hint]Hint[/hint]Harry 可以念这个咒语:"big-got-them".
思路:每个单词的第一个字母可以看作起点,最后一个字母看作终点,可以构图。用BFS看B与M是否是连通的。
代码如下:
BFS:
#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <queue>using namespace std;vector<int>g[26];int vist[26];void init(){ for(int i = 0; i < 26; i ++) { vist[i] = 0; g[i].clear(); }}void bfs(){ queue<int> q; q.push('b'-'a'); int u ; while(!q.empty()) { u = q.front(); q.pop(); vist[u] = 1; for(int i = 0; i < (int)g[u].size(); i ++) { if(g[u][i] == 'm'-'a'){ printf("Yes.\n"); return ; } else if(vist[g[u][i]] == 0) { q.push(g[u][i]); } } } printf("No.\n");}int main(){ char str[100]; int u , v , m; init(); while(scanf("%s",str)!=EOF) { if(str[0] == '0'){ bfs(); init(); } else{ m = strlen(str); u = str[0]-'a'; v = str[m-1]-'a'; g[u].push_back(v); } } return 0;}
DFS:
#include <iostream>#include <cstdio>#include <vector>#include <cstring>using namespace std;vector<int>g[26];int vist[26];int flag = 0;void init(){ for(int i = 0; i < 26; i ++) { vist[i] = 0; g[i].clear(); } flag = 0;}void dp(int s){ if(flag) return ; if(s == 'm'-'a') { flag = 1; printf("Yes.\n"); return; } if(vist[s]) return; vist[s] = 1; for(int i = 0; i < (int)g[s].size(); i ++) { dp(g[s][i]); }}void dfs(){ vist[1] = 1; for(int i = 0; i < (int)g[1].size(); i ++) { dp(g[1][i]); } if(!flag) printf("No.\n");}int main(){ char str[100]; int u , v , m; init(); while(scanf("%s",str)!=EOF) { if(str[0] == '0'){ dfs(); init(); } else{ m = strlen(str); u = str[0]-'a'; v = str[m-1]-'a'; g[u].push_back(v); } } return 0;}
1 0
- 变形课 简单搜索
- hdu 变形课(简单搜索)
- HDU 1181 变形课 深度优先搜索(DFS)简单题
- hdu 1181 变形课 (dfs)简单搜索
- 1181 变形课 深度搜索
- 搜索---HDU 1181 变形课
- 变形课(DFS, 简单)
- hdu1181 dfs搜索之变形课
- Hdu1181 - 变形课 - 深度优先搜索
- 搜索专题(DFS)HDU1181-变形课
- 深度搜索的变形
- HDU1181 变形课(搜索或并查集)
- ACM-搜索之变形课——hdu1181
- 暑假集训第三周第二阶段 搜索 D - 变形课
- hdu 1181变形课 搜索水题 dfs
- 深度搜索变形记咒语
- 二分搜索及其变形讨论
- 二分搜索及其变形应用
- <费曼物理学讲义>摘要学习(技术之外,忙里偷闲 慢慢更新中....)
- Oracle创建表时Storage参数具体含义
- 十个目前最流行的基于MVC设计模式的PHP框架
- 项目二。
- TextView 的属性
- 变形课 简单搜索
- C++虚函数表解析
- 一个debug lib库和libcmt.lib引发的血案
- vmware 删除后安装不了,vmware workstation.msi failed
- Com/OLE调用中0x80040154错误码的解决办法
- Spring 测试类
- 在vs2010里自建cocos2dx工程,不依赖cocos2dx包
- IDL add subdirectories to PATH
- maven 使用小问题