#include<bits/stdc++.h>
using namespace std;
vector<int>a[30];
bool b[30];
int l,d[30][30];
string s1,s2,mp[30];
void find(int x){
b[x]=1;
int i,y;
for(i=0;i<a[x].size();i++){
y=a[x][i];
if(!b[y]){
find(y);
cout<<", "<<mp[y];
}
}
}
int newstr(string s){
int i;
for(i=1;i<=l;i++)
if(mp[i]==s)
return i;
mp[++l]=s;
return l;
}
int main(){
int i,j,k,n,m,kase=0;
while(scanf("%d%d",&n,&m)&&n&&m){
if(kase!=0)printf("\n");
memset(d,0,sizeof(d));
l=0;
for(i=1;i<=m;i++){
cin>>s1>>s2;
getchar();
d[newstr(s1)][newstr(s2)]=1;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(d[i][k]&&d[k][j])
d[i][j]=1;
for(i=1;i<=n;i++)
a[i].clear();
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(d[i][j]&&d[j][i]){
a[i].push_back(j);
a[j].push_back(i);
}
memset(b,0,sizeof(b));
printf("Calling circles for data set %d:\n",++kase);
for(i=1;i<=n;i++)
if(!b[i]){
cout<<mp[i];
find(i);
printf("\n");
}
}
return 0;
}
UVA 247 Calling Circles - ACM/ICPC World Finals 1996
最新推荐文章于 2018-10-31 23:06:51 发布