直接po代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<cstring>
#include<string>
#define rep(i,n) for (int i=1;i<=n;i++)
using namespace std;
struct P{
int v,w;
};
vector<P> map[150];
int n,m;
int dis[150]={0};
int main(){
while (1){
scanf("%d%d",&n,&m);
rep(i,n) map[i].clear();
if (n==0&&m==0)
break;
memset(dis,0x3f,sizeof dis);
rep(i,m){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
P cur;
cur.v=v,cur.w=w;
map[u].push_back(cur);
cur.v=u;
map[v].push_back(cur);
}
dis[1]=0;
queue<int> q;
q.push(1);
bool vis[150]={false};
vis[1]=true;
while (!q.empty()){
int s=q.front();
q.pop();
rep(i,map[s].size()) if (dis[s]+map[s][i-1].w<dis[map[s][i-1].v]){
dis[map[s][i-1].v]=dis[s]+map[s][i-1].w;
if (!vis[map[s][i-1].v]){
vis[map[s][i-1].v]=true;
q.push(map[s][i-1].v);
}
}
vis[s]=false;
}
printf("%d\n",dis[n]);
}
return 0;
}