首页 > 其他 > 详细

hdu 2066 一个人的旅行

时间:2015-06-27 22:51:45      阅读:257      评论:0      收藏:0      [点我收藏+]

最短路问题,果然好久不做都忘得差不多了,跑一次Dijkstra算法把所有点的最短距离都跑出来

#include<iostream>
#include<cstring>
#define maxn 1005
#define inf 1<<30
using namespace std;
int t,s,d;
int mapp[maxn][maxn];
int w[maxn];
int visit[maxn];
int di[maxn];
void solve()
{
	memset(visit,0,sizeof(visit));
	fill(di,di+maxn,inf);
	di[0]=0;
	while(t--)
	{
		int v=-1;
		for(int i=0;i<maxn;i++)
		{
			if(!visit[i]&&(v==-1||di[i]<di[v])) v=i;
		}
		//cout<<s<<"~"<<v<<endl;
		visit[v]=1;
		for(int i=0;i<maxn;i++)
		{
			if(mapp[v][i]!=inf)
			{
				di[i]=min(di[i],di[v]+mapp[v][i]);
				//cout<<i<<"~"<<di[i]<<endl;
			}
		}	
	}
}
int main()
{
	while(cin>>t>>s>>d)
	{
		for(int i=0;i<maxn;i++)
		{
			for(int j=0;j<maxn;j++) mapp[i][j]=inf;
		}
		for(int i=0;i<t;i++)
		{
			int x,y,z;
			cin>>x>>y>>z;
			mapp[y][x]=mapp[x][y]=min(z,mapp[x][y]);
		}
		for(int i=0;i<s;i++)
		{
			int x;
			cin>>x;
			mapp[0][x]=mapp[x][0]=0;
		}
		for(int i=0;i<d;i++) cin>>w[i];
		solve();
		int re=inf;
		for(int i=0;i<d;i++)
		{
			re=min(re,di[w[i]]);
		}
		cout<<re<<endl;
	}
	return 0;
}


hdu 2066 一个人的旅行

原文:http://blog.csdn.net/zafkiel_nightmare/article/details/46664127

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!