#include <iostream>
using namespace std;
#include <cmath>
#include <algorithm>
#define maxint 10000000
int a[1005][1005],dist[1005],n,c[1005],d[1005],s[1005];
void dj(int k)
{
int i,j,t,newint;
for(i=1;i<=n;i++)
{
dist[i]=a[k][i];
s[i]=0;
}
dist[k]=0;s[k]=1;
for(i=1;i<n;i++)
{
t=maxint;
for(j=1;j<=n;j++)
if(!s[j]&&dist[j]<t) t=dist[j],k=j;
s[k]=1;
for(j=1;j<=n;j++)
if(!s[j]&&a[k][j]<maxint)
{
newint=dist[k]+a[k][j];
if(dist[j]>newint) dist[j]=newint;
}
}
}
int main()
{
int m,mm,i,j,k,dd,ma,nn;
while(cin>>nn>>m>>mm)
{
ma=maxint;n=0;
for(i=1;i<=1004;i++)
for(j=1;j<=1004;j++)
a[i][j]=maxint;
for(k=0;k<nn;k++)
{
cin>>i>>j>>dd;
if(i>n) n=i;if(j>n) n=j;
if(dd<a[i][j]) a[i][j]=a[j][i]=dd;
}
for(i=0;i<m;i++)
cin>>c[i];
for(i=0;i<mm;i++)
cin>>d[i];
for(i=0;i<m;i++)
{
dj(c[i]);
for(j=0;j<mm;j++)
if(s[d[j]]==1) {if(ma>dist[d[j]]) ma=dist[d[j]];}
}
cout<<ma<<endl;
}
return 0;
}hdu 2066最短路径(Dijkstra算法)
最新推荐文章于 2021-08-10 22:54:26 发布
本文深入探讨了使用Dijkstra算法解决实际问题的过程。通过输入节点数量、边权重矩阵、起始节点、目标节点等参数,实现从起点到终点的最短路径搜索。算法在解决城市交通导航、网络路由选择等问题中具有广泛的应用价值。
566

被折叠的 条评论
为什么被折叠?



