与prim算法好像。。
#include <iostream>
using namespace std;
const int maxn=100000000;
const int mm=1000;
int n,m,map[mm][mm];
int dijkstra()
{
int cost[mm];
bool v[mm];
for(int i=2;i<=n;i++) //prim算法也是从第二个开始
{
cost[i]=map[1][i];
v[i]=0;
}
v[1]=1;
for(int i=2;i<=n;i++)
{
int minn=maxn,k;
for(int j=2;j<=n;j++)
if(!v[j]&&cost[j]<minn)
minn=cost[j],k=j;
v[k]=1;
for(int j=2;j<=n;j++)
if(!v[j]&&cost[j]>cost[k]+map[k][j]) //唯一区别。
cost[j]=cost[k]+map[k][j];
}
return cost[n];
}
int main()
{
while(cin>>n>>m&&n&&m)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=maxn;
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
map[a][b]=map[b][a]=c;
}
cout<<dijkstra()<<"\n";
}
return 0;
}