#include<stdio.h>
#include<vector>
using namespace std;
const int inf=0xffffff;
struct node{
int v,d;
};
vector <node> a[1005];//a[u]存放从顶点u出发可以到达的所有顶点
int n,d[1005],vis[1005],m;
void dijkstra()
{
int i,j,v;
for(i=1;i<=n;i++)
{
int u,min=inf;
for(j=1;j<=n;j++)
{
if(vis[j]==0&&d[j]<min)
{
u=j;
min=d[j];
}
}
vis[u]=1;
for(j=0;j<a[u].size();j++)
{
v=a[u][j].v;
if(vis[v]==0&&d[u]+a[u][j].d<d[v])
{
d[v]=d[u]+a[u][j].d;
}
}
}
}
int main()
{
int i,u,v,f;
while(~scanf("%d%d",&n,&m))
{
for(i=0;i<105;i++)
a[i].clear();
fill(d,d+1005,inf);
fill(vis,vis+1005,0);
d[1]=0;
if(n==0&&m==0)
break;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&f);
node t;
t.v=v;t.d=f;
a[u].push_back(t);
t.v=u;t.d=f;
a[v].push_back(t);
}
dijkstra();
printf("%d\n",d[n]);
}
}
地杰斯特拉算法邻接表版
最新推荐文章于 2024-08-19 12:02:02 发布