#include <stdio.h>
#include <string.h>
#define MAX 0x7ffffff
int map[202][202],dist[202],visit[202];
//最短路径
int Dijsktra(int n,int start,int end)
{
int i,j,k,min;
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
dist[i]=map[start][i];
visit[start]=1;
for (i=1;i<n;i++)
{
min=MAX;
k=1;
for (j=0;j<n;j++)
if (!visit[j]&&dist[j]<min)
{
min=dist[j];
k=j;//k保存当前邻接点中距离最小的点的号码
}
if(k==end)
return min;
visit[k]=1;// 表示k点已存入visit集合中
for(j=0;j<n;j++)// 更新dist
if(!visit[j]&&dist[j]>(min+map[j][k]))
dist[j]=min+map[j][k];
}
return dist[end];
}
int main()
{
int n,m,i,j,s,e,ans,x,y,val;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)//初始化
for(j=0;j<n;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=MAX;
}
for (i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&val);
if(val<map[x][y])
map[x][y]=map[y][x]=val;
}
scanf("%d %d",&s,&e);
ans=Dijsktra(n,s,e);
if(ans==MAX)
printf("-1\n");
else
printf("%d\n",ans);
}
return 0;
}
hdu1874 畅通工程续
最新推荐文章于 2024-03-23 15:54:44 发布