标签:
#include<iostream>
using namespace std;
#define MAX 0x3f3f3f3f
#define max 205
int map[max][max],sign[max];
int main()
{
int n,m,i,j,a,b,d;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
{
sign[i]=0;
for(j=0;j<n;j++)
{
if(i==j) map[i][j]=0; //注意
else map[i][j]=MAX;
}
}
while(m--)
{
cin>>a>>b>>d;
if(map[a-1][b-1]>d) map[a-1][b-1]=map[b-1][a-1]=d; //注意
}
// cin>>a>>b;
int min,u;
a=0;
b=n-1;
sign[a]=1;
//接下来是精髓
for(i=0;i<n;i++)
{
min=MAX;
for(j=0;j<n;j++)
if(!sign[j]&&min>map[a][j])
{
min=map[a][j];
u=j;
}
sign[u]=1;
for(j=0;j<n;j++)
if(!sign[j]&&map[u][j]<MAX)
{
if(min+map[u][j]<map[a][j])
map[a][j]=min+map[u][j];
}
}
if(map[a][b]<MAX) cout<<map[a][b]<<endl;
else cout<<"-1"<<endl;
}
return 0;
}
/**************************************
Problem id : SDUT OJ 2143
User name : 大领主
Result : Accepted
Take Memory : 564K
Take Time : 30MS
Submit Time : 2016-05-26 08:34:59
**************************************/
标签:
原文地址:http://www.cnblogs.com/woyaocheng/p/5529736.html