#include<iostream> #include<queue> #include<string> #include<string.h> #define MAX_LENGTH 6 #define CHRCK(a,b) (a&&(b!=a)) using namespace std; typedef struct f { string name; int my_friend_index; int my_index; }Friends; Friends x[1002]; int n,m; int length; int Bfs() { queue<Friends> q; for(int i=1;i<=n;++i) { q.push(x[i]); //把所有的人入队 } Friends temp; while(!q.empty()) { temp=q.front(); q.pop(); if(CHRCK(temp.my_friend_index,temp.my_index)) { //如果朋友链没到底,就将下一个人入队 ++length; q.push(x[temp.my_friend_index]); } if(x[temp.my_friend_index].my_friend_index==temp.my_index) return length; } return -1; } int main() { while(1) { cin>>n; if(!n)break; for(int i=1;i<=n;++i) { cin>>x[i].name; x[i].my_index=i;//记录下我的地址 } //输入人名 cin>>m; string one="",two=""; int j,k; for(int i=0;i<m;++i) { cin>>one>>two;//输入两个人名 for(j=1;j<=n;++j) { if(one==x[j].name) { break; } } for(k=1;k<=n;++k) { if(two==x[k].name) { break; } } x[j].my_friend_index=k;//记录朋友在数组中的地址 x[k].my_friend_index=j;//双向记录 } cout<<Bfs()<<endl; } return 0; }wa