题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4460
题记:BFS题目。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
map<string,int>ma;
vector<int>g[N];
int vis[N];
int room[N];//记录这个点是否走过了
int a[N];
int n,m;
int bfs(int x){
queue<int>q;
q.push(x);
memset(room,0,sizeof(room));
memset(a,-1,sizeof(a));
vis[x]=room[x]=1;//记录开始的点
int ans=x;
a[x]=0;
int mmax=0;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(room[v])
continue;
room[v]=vis[v]=1;
a[v]=a[u]+1;
if(mmax<a[u]+1){
mmax=a[u]+1;
ans=v;
}
q.push(v);
}
}
return ans;
}
int solve(int i){
int u=bfs(i);
int v=bfs(u);
return a[v];
}
int main(){
string s1,s2,s;
while(cin>>n&&n){
ma.clear();//清空ma
for(int i=1;i<=n;i++){
cin>>s;
ma[s]=i;
g[i].clear();//清空每一个数组
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>s1>>s2;
int u=ma[s1];
int v=ma[s2];
//将两个人的坐标记录下来
g[u].push_back(v);
g[v].push_back(u);
//在对应数组存下对方,即表示他们是朋友
}
if(m+1<n){//至少要有n-1对人是朋友才符合条件
cout<<"-1"<<endl;
continue;
}
memset(vis,0,sizeof(vis));
int ans=0;
for(int i=1;i<=n;i++){
if(!vis[i])
ans=max(ans,solve(i));
}
for(int i=1;i<=n;i++)
if(a[i]==-1){
ans=-1;
break;
}
cout<<ans<<endl;
}
return 0;
}