HDU 1181 变形课 BFS 水过。。。
题目理解听想人,就是看有没有办法让b变成m。
View Code
1 #include<stdio.h> 2 #include<string.h> 3 int q[100000]; 4 int map[30][30]; 5 int pro[100000]; 6 int f,r; 7 8 int main() 9 { 10 int n,i,j,len,leap; 11 char s[200]; 12 while(scanf("%s",s) != EOF) 13 { 14 leap = 0; 15 memset(map,0,sizeof(map)); 16 memset(pro,0,sizeof(pro)); 17 memset(q,0,sizeof(q)); 18 len = strlen(s); 19 map[s[0]-'a'][s[len-1]-'a'] = 1; 20 21 while(scanf("%s",s) != EOF) 22 { 23 len = strlen(s); 24 if(s[0] == '0') 25 break; 26 map[s[0]-'a'][s[len-1]-'a'] = 1; 27 } 28 f = 0,r = 0; 29 q[r++] = 'b'-'a'; 30 while(f < r) 31 { 32 int v; 33 v = q[f++]; 34 for(i = 0;i < 26;i++) 35 { 36 if(map[v][i] && !pro[i]) 37 { 38 if(i == 'm'-'a') 39 { 40 leap = 1; 41 break; 42 } 43 q[r++] = i; 44 pro[i] = 1; 45 } 46 } 47 if(leap) 48 break; 49 } 50 if(leap) 51 puts("Yes."); 52 else 53 puts("No."); 54 } 55 return 0; 56 }