可以看成floyd,用bool变量标记公司
View Code
1 #include<cstdio> 2 #include<cstring> 3 #include<set> 4 using namespace std; 5 bool ss[300][300][30]; 6 void floyd(int n) 7 { 8 for(int k=1;k<=n;k++) 9 { 10 for(int i=1;i<=n;i++) 11 { 12 if(ss[i][k][26]) 13 { 14 for(int j=1;j<=n;j++) 15 { 16 for(int t=0;t<26;t++) 17 if(ss[i][k][t]&&ss[k][j][t]) 18 { 19 ss[i][j][26]=ss[i][j][t]=true; 20 } 21 } 22 } 23 } 24 } 25 } 26 int main() 27 { 28 int n; 29 while(scanf("%d",&n)&&n) 30 { 31 memset(ss,false,sizeof(ss)); 32 int a,b; 33 char s[30]; 34 while(scanf("%d%d",&a,&b)&&a&&b) 35 { 36 scanf("%s",s); 37 for(int i=0;s[i];i++) 38 ss[a][b][s[i]-'a']=true; 39 ss[a][b][26]=true; 40 } 41 floyd(n); 42 while(scanf("%d%d",&a,&b)&&a&&b) 43 { 44 if(!ss[a][b][26]) 45 { 46 printf("-\n"); 47 } 48 else 49 { 50 for(int i=0;i<26;i++) 51 if(ss[a][b][i]) 52 putchar(char(i+'a')); 53 printf("\n"); 54 } 55 } 56 printf("\n"); 57 } 58 return 0; 59 }