poj1125 暴力+dijsktra算法

不得不说自己真的是马虎的不行啦,结果让我多交了两次而且还改了好长时间。。。

#include<iostream>
#include<queue>
using namespace std;
int a[105][105],sign[105];
int dij(int m, int n)
{
	queue<int>q;
	int b[105],i,t;
	bool vis[105];
	for(i=1; i<=105; i++)//取得是最大的
	{
		b[i]=10000;
		vis[i]=false;
	}
	b[m]=0;
	vis[m]=true;
    q.push(m);
	while(!q.empty())//队列不空的时候
	{
		t=q.front();
		q.pop();
		vis[t]=false;
		for(i=1; i<=n; i++)
		{
			if(a[t][i]+b[t]<b[i])
			{
				b[i]=a[t][i]+b[t];
				if(vis[i]==false)
				{
					q.push(i);
					vis[i]=true;
				}
			}
		}
	}
	int ma=0;
	for(i=1; i<=n; i++)
		if(b[i]>ma)
			ma=b[i];
	return ma;
}
int main()
{
	int n,i,j,T;
	while(1)
	{
		cin>>n;
		if(n==0)
			break;
		for(i=1; i<=n; i++)
			for(j=1; j<=n; j++)
				a[i][j]=10000;//每程序的最大的距离时INT_MAX的
		for(i=1; i<=n; i++)
		{ 
			cin>>T;
			while(T--)
			{
				cin>>j;
				cin>>a[i][j];//记录的是时间的
			}
		}
		for(i=1; i<=n; i++)
		{
			sign[i]=dij(i,n);
		}
		int ma=INT_MAX,t=0;
		for(i=1; i<=n; i++)
			if(sign[i]<ma)
			{
				ma=sign[i];
				t=i;
			}
		if(ma==INT_MAX)
			cout<<"disjoint"<<endl;
		else
		    cout<<t<<" "<<ma<<endl;
	}
	return 0;
}


 

你可能感兴趣的:(poj1125 暴力+dijsktra算法)