这个题目就是给一堆字符串 但是有用的只有 第一个字母和最后一个字母
其实就是个搜索 用map[26][26]表示 一个图 如果可以从某个字母到另一个的话 标记 map中那个位置为1;
最后看能不能从b 到 m
直接从b dfs 一直看 访问一个就标记 1
反正是最基础的dfs了, 直接敲完就AC了
#include<cstdio> #include<iostream> #include<cstring> #include<string> using namespace std; int map[26][26]; bool vis[26]; int s,e; bool flag; void dfs(int a) { if(a==e) flag=1; if(flag) return ; int i,j; vis[a]=1; for(i=0;i<26;++i) { if(map[a][i] && !vis[i]) { dfs(i); } } } int main() { char str[100]; int a,b; s=1; e=12; flag=0; memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); while(scanf("%s",str)!=EOF) { if(str[0]=='0') { dfs(1); if(flag) printf("Yes.\n"); else printf("No.\n"); memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); flag=0; } else { a=str[0]-'a'; b=str[strlen(str)-1]-'a'; map[a][b]=1; } } }