双向图,无优化代码
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-8
#define pi 3.1415
typedef long long ll;
using namespace std;
int u[10005],v[10005],w[10005];
int dis[105];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m),n+m)
{
memset(u,0,sizeof(u));
memset(v,0,sizeof(v));
memset(w,0,sizeof(w));
for(int i=1; i<=n; i++) dis[i]=inf;
//memset(dis,inf,sizeof(dis));
dis[1]=0;
for(int i=1; i<=m; i++)
{
scanf("%d %d %d",&u[i],&v[i],&w[i]);
}
for(int k=1; k<=n; k++)
{
for(int i=1; i<=m; i++)
{
dis[u[i]]=min(dis[u[i]],dis[v[i]]+w[i]);//双向
dis[v[i]]=min(dis[v[i]],dis[u[i]]+w[i]);
}
}
printf("%d\n",dis[n]);
}
return 0;}