解答:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person
{
char name[21];
char from[21];
char to[21];
}per[100];
int main()
{
int n,i,j,k=1;
scanf("%d",&n);
char ori[100][21];
char des[4][21]={"zichuan","linzi","zhoucun","boshan"};
for(i=0;i<n;i++)
{
scanf("%*c %s %s %s",&per[i].name,&per[i].from,&per[i].to);
}
strcpy(ori[0],per[0].from);
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
if(strcmp(ori[j],per[i].from)==0)
break;
}
if(j==k) strcpy(ori[k++],per[i].from);
}
for(i=0;i<k;i++)
{
printf("%s :",ori[i]);
for(j=0;j<n;j++)
{
if(strcmp(ori[i],per[j].from)==0)
printf(" %s",per[j].name);
}
printf("\n");
}
for(i=0;i<4;i++)
{
printf("%s :",des[i]);
for(j=0;j<n;j++)
{
if(strcmp(per[j].to,des[i])==0)
printf(" %s",per[j].name);
}
printf("\n");
}
return 0;
}