位运算,好题。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int map[210][210];
int main()
{
int n,x,y,i,j,k,flag;
char s[30];
while(scanf("%d",&n)&&n)
{
memset(map,0,sizeof(map));
while(scanf("%d%d",&x,&y)&&!(x==0&&y==0))
{
scanf("%s",s);
int lens=strlen(s);
for(i=0;i<lens;i++)
map[x][y]|=(1<<(s[i]-'a'));
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]|=(map[i][k]&map[k][j]);
while(scanf("%d%d",&x,&y)&&!(x==0&&y==0))
{
for(i=0,flag=0;i<26;i++)
{
if(map[x][y]&(1<<i))
{
flag=1;
printf("%c",i+'a');
}
}
if(!flag)
printf("-");
printf("\n");
}
printf("\n");
}
return 0;
}