再水一道哈
终于一次过了
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
using namespace std;
int dis[110][110],d[110],vis[110],n,m;
void dij()
{
int i,j,k,mm;
memset(vis,0,sizeof vis);
for(i=1;i<=n;i++)
d[i]=dis[1][i];
vis[1]=1;d[1]=0;
for(i=1;i<=n;i++)
{
k=0;mm=inf;
for(j=2;j<=n;j++)
{
if(!vis[j]&&d[j]<mm)
{
mm=d[j];
k=j;
}
}
if(k==n) break;
vis[k]=1;
for(j=2;j<=n;j++)
{
if(!vis[j]&&(mm+dis[k][j]<d[j]))
d[j]=mm+dis[k][j];
}
}
}
int main()
{
int i,u,v,w;
while(scanf("%d%d",&n,&m)&&(n||m))
{
memset(dis,0x3f,sizeof dis);
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
if(w<dis[u][v]) dis[u][v]=dis[v][u]=w;
}
dij();
printf("%d\n",d[n]);
}
return 0;
}