3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2
2 -1
#include<iostream>
#include<cstring>
#include<cstdio>
#define MX 100000
using namespace std;
int n,m,x,y,z,s,t;
int map[205][205];
int p[205],num[205];
void dijkstra()
{
int mi,k;
memset(p,0,sizeof(p));
for(int i=0;i<n;i++)
num[i]=map[s][i];
num[s]=0;
p[s]=1;
for(int i=0;i<n;i++)
{
mi=MX;
for(int j=0;j<n;j++)
{
if(!p[j]&&mi>num[j]){
mi=num[j];
k=j;
}
}
//if(mi==MX)break;
p[k]=1;
for(int j=0;j<n;j++)
{
if(!p[j]&&num[j]>num[k]+map[j][k])
num[j]=num[k]+map[j][k];
}
}
if(num[t]==MX)
printf("%d\n",-1);
else
printf("%d\n",num[t]);
}
int main()
{
while(cin>>n>>m)
{
// if(n==m&&m==0)break;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
map[i][j]=MX;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>z;
if(map[x][y]>z)
{map[x][y]=z;
map[y][x]=z;
}
}
scanf("%d%d",&s,&t);
dijkstra();
}
return 0;
}
原文:http://blog.csdn.net/zhangweiacm/article/details/38517683