#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
const int inf=0x3f3f3f3f;
int dis[111][111];
int d[111];
bool vis[111];
void init(int n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
dis[i][j]=inf;
}
}
}
void dijkstra(int n)
{
memset(vis,0,sizeof vis);
for(int i=1;i<=n;i++)
d[i]=dis[1][i];
d[1]=0;
vis[1]=1;
for(int i=2;i<=n;i++)
{
int x;
int m=inf;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&d[j]<m)
{
x=j;
m=d[j];
}
}
vis[x]=1;
for(int k=1;k<=n;k++)
{
if(!vis[k])
d[k]=min(d[k],d[x]+dis[x][k]);
}
}
}
int main()
{
int n,m;
int u,v,w;
while(scanf("%d%d",&n,&m)&&(n+m))
{
init(n);
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
if(w<dis[u][v]||w<dis[v][u])
dis[u][v]=dis[v][u]=w;
}
dijkstra(n);
int ans=d[n];
printf("%d\n",ans);
}
return 0;
}
HDU2544(最短路)
題目大意:如題。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.