模板
spfa
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int inf=0xffffff;
const int maxn=111;
int n,m,cnt;
int dis[maxn];
int head[maxn];
int vis[maxn];
struct node{
int to,w,nxt;
}edge[maxn*maxn];
void addedge(int x,int y,int val){
edge[++cnt].to=y;
edge[cnt].w=val;
edge[cnt].nxt=head[x];
head[x]=cnt;
}
void spfa(int s)
{
queue <int> q;
for(int i=1;i<=n;i++) dis[i]=inf;
memset(vis,false,sizeof(vis));
q.push(s);
dis[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=false;
for(int i=head[u];i!=-1;i=edge[i].nxt)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].w)
{
dis[v]=dis[u]+edge[i].w;
if(!vis[v])
{
vis[v]=true;
q.push(v);
}
}
}
}
}
int main(){
int a,b,val;
while(scanf("%d %d",&n,&m)&&(n+m)){
cnt=0;memset(head,-1,sizeof(head));
while(m--){
scanf("%d %d %d",&a,&b,&val);
addedge(a,b,val);
addedge(b,a,val);
}
spfa(1);
printf("%d\n",dis[n]);
}
return 0;
}