点击打开链接//********最短路径问题***********//
//注意本题可能会存在两点之间有多条路径 //
#include<iostream>
#include<stdlib.h>
#include<limits.h>
#include<string.h>
using namespace std;
#define MP 10010//定义稍大些
#define NP 110
int map[NP][NP];
int dist[MP];
void distance(int p,int map[][NP],int N)
{
int s=-1;
int visited[NP];//表示该点是否找到最短路径,1找到,0未找到
memset(visited,0,sizeof(visited));
for(int i=1;i<=N;i++)
{
dist[i]=map[p][i];
}
visited[p]=1;//初始化改点
for(int k=1;k<N;k++)
{
int min=INT_MAX;
for(int i=1;i<=N;i++)
{
if(dist[i]<min&&!visited[i])
{
min=dist[i];
s=i;
}
}
//cout<<s<<" ";
visited[s]=1;
for(int i=2;i<=N;i++)
{
if(!visited[i]&&map[s][i]!=INT_MAX)
{
if(dist[s]+map[i][s]<dist[i])
dist[i]=dist[s]+map[i][s];
}
}
}
}
int main()
{
int M,N,a,b,c,maxNode;
while(cin>>N>>M)
{
maxNode=0;
if(M==0&&N==0) break;
for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
{
map[i][j]=map[j][i]=INT_MAX;
}
for(int i=1;i<=M;i++)
{
cin>>a>>b>>c;
maxNode=(maxNode>max(a,b))?maxNode:max(a,b);//存在两点之间有多条路径
//*******map[a][b]应该记录最短距离
map[a][b]=map[b][a]=(map[b][a]<c)?map[a][b]:c;
}
distance(1,map,maxNode);
cout<<dist[N]<<endl;
}
system("pause");
return 0;
}
//注意本题可能会存在两点之间有多条路径 //
#include<iostream>
#include<stdlib.h>
#include<limits.h>
#include<string.h>
using namespace std;
#define MP 10010//定义稍大些
#define NP 110
int map[NP][NP];
int dist[MP];
void distance(int p,int map[][NP],int N)
{
int s=-1;
int visited[NP];//表示该点是否找到最短路径,1找到,0未找到
memset(visited,0,sizeof(visited));
for(int i=1;i<=N;i++)
{
dist[i]=map[p][i];
}
visited[p]=1;//初始化改点
for(int k=1;k<N;k++)
{
int min=INT_MAX;
for(int i=1;i<=N;i++)
{
if(dist[i]<min&&!visited[i])
{
min=dist[i];
s=i;
}
}
//cout<<s<<" ";
visited[s]=1;
for(int i=2;i<=N;i++)
{
if(!visited[i]&&map[s][i]!=INT_MAX)
{
if(dist[s]+map[i][s]<dist[i])
dist[i]=dist[s]+map[i][s];
}
}
}
}
int main()
{
int M,N,a,b,c,maxNode;
while(cin>>N>>M)
{
maxNode=0;
if(M==0&&N==0) break;
for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
{
map[i][j]=map[j][i]=INT_MAX;
}
for(int i=1;i<=M;i++)
{
cin>>a>>b>>c;
maxNode=(maxNode>max(a,b))?maxNode:max(a,b);//存在两点之间有多条路径
//*******map[a][b]应该记录最短距离
map[a][b]=map[b][a]=(map[b][a]<c)?map[a][b]:c;
}
distance(1,map,maxNode);
cout<<dist[N]<<endl;
}
system("pause");
return 0;
}