首页 > 代码库 > HDU 1811

HDU 1811

通过一个单词来建立图形结构

将单词词头指向词尾作为一条边

图模型建立好后,从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 }

 

HDU 1811