hdu 4460(STL+BFS)

Problem link adress  :hdu  4460

Problem analysis:

For this problem,first give you some people's name and then give you the relations of them.

Now,you task is calculate the maximum steps between the every two guys.

To solve the problem,you just need to calculate all the steps between the every two guys.

And of course,the BFS is good to use.

Here is the detailed code:

#include<iostream>
#include<string>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int M=1020;
const int INF=0x3f3f3f3f3f;
int dis[M][M];//记录每两个人之间的距离
int mark[M];
int n,m;
map<string,int>match;
vector<int>vec[M];
queue<int>q;
void BFS(int x)//实现标号为x的人的朋友关系搜索
{
	memset(mark,0,sizeof(mark));
	dis[x][x]=0;
	mark[x]=1;
	q.push(x);
	while(!q.empty())
	{
		int t=q.front();
		q.pop();
		int y=vec[t].size();//统计标号为t的人的直接朋友人数
		for(int j=0;j<y;j++)//对他的每一个朋友进行操作
		{
			int v=vec[t][j];//v记录t的直接朋友
			if(mark[v])
				continue;
			dis[x][v]=dis[x][t]+1;//x到v的朋友距离为x到t的朋友距离加1
			q.push(v);
			mark[v]=1;
		}
	}
}
	
int main()
{
	string name,name1,name2;
	while(cin>>n)
	{
		if(n==0)
			break;
	    int i,j;
		for(i=0;i<n;i++)
		{
			cin>>name;
			match[name]=i;
		}
		for(i=0;i<n;i++)
		{
			dis[i][i]=0;
			for(j=i+1;j<n;j++)
				dis[i][j]=dis[j][i]=INF;
		}
		cin>>m;
		for(i=0;i<n;i++)//对容器的初始化
			vec[i].clear();
		while(m--)//建立每个人的直接朋友关系
		{
			cin>>name1>>name2;
			int t1=match[name1];
			int t2=match[name2];
			vec[t1].push_back(t2);
			vec[t2].push_back(t1);
		}
		for(i=0;i<n;i++)//对每个人进行搜索
		 BFS(i);
		int ans=0;
		for(i=0;i<n;i++)//选择最大的朋友距离
		{
			for(j=i+1;j<n;j++)
			{
				if(dis[i][j]>ans)
					ans=dis[i][j];
			}
		}
		if(ans==INF)
			ans=-1;
		cout<<ans<<endl;
		
	}
	return 0;
}

  

  

 

 

 

 

转载于:https://www.cnblogs.com/heat-man/archive/2012/12/19/2825374.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值