通过一个单词来建立图形结构
将单词词头指向词尾作为一条边
图模型建立好后,从b出发,dfs到所有搜索的到的点
最后判断m是否被搜索到过即可
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 char s[10005]; 6 int first[30] , k , vis[30]; 7 8 struct Edge{ 9 int y , next; 10 }e[100005]; 11 12 void add_edge(int x , int y) 13 { 14 e[k].y = y , e[k].next = first[x]; 15 first[x] = k++; 16 } 17 18 void dfs(int t) 19 { 20 vis[t] = 1; 21 for(int i = first[t] ; i!=-1 ; i=e[i].next){ 22 int v = e[i].y; 23 if(!vis[v]) dfs(v); 24 } 25 } 26 int main() 27 { 28 // freopen("a.in" , "r" , stdin); 29 k = 0; 30 memset(first , -1 , sizeof(first)); 31 memset(vis , 0 , sizeof(vis)); 32 while(scanf("%s" , s)!=EOF){ 33 if(s[0] == '0'){ 34 dfs(1); 35 if(vis[(int)('m'-'a')]) puts("Yes."); 36 else puts("No."); 37 k = 0; 38 memset(first , -1 , sizeof(first)); 39 memset(vis , 0 , sizeof(vis)); 40 continue; 41 }; 42 int len = strlen(s); 43 int m = (int)(s[0] - 'a'); 44 int n = (int)(s[len-1] - 'a'); 45 add_edge(m , n); 46 } 47 return 0; 48 }
我还在坚持,我还未达到我所想,梦~~一直在