#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int top;
struct {
int head;
}H[1000];
struct {
int v,next,w;
}E[20000];
void add(int u,int v,int w)
{
E[top].v = v;
E[top].w = w;
E[top].next = H[u].head;
H[u].head = top++;
}
int d[1000];
void spfa()
{
memset(d,63,sizeof(d));
d[1] = 0;
queue <int> q;
q.push(1);
bool vis[1000];
memset(vis,0,sizeof(vis));
vis[1] = 1;
while(!q.empty())
{
int x = q.front();vis[x]= 0;q.pop();
for(int i=H[x].head;i!=-1;i = E[i].next)
{
if(d[E[i].v]>d[x]+E[i].w)
{
d[E[i].v] = d[x]+E[i].w;
if(!vis[E[i].v])
{
vis[E[i].v] = 1;
q.push(E[i].v);
}
}
}
}
}
int main()
{
int n,m,u,v,w;
while(cin>>n>>m,n||m)
{
top = 0;
memset(H,-1,sizeof(H));
memset(E,-1,sizeof(E));
while(m--)
{
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
spfa();
cout<<d[n]<<endl;
}
}
spfa+邻接表
最新推荐文章于 2019-05-31 09:32:09 发布