#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int inf=0x7fffffff;
int map[210][210],hash[210],dis[210];
int n,m,s,t;
void dijstra()
{
    dis[s]=0;
    for(int i=0;i<n;i++)
    {
         int t=inf,pos;
         for(int j=0;j<n;j++)
         {
              if(hash[j]==0)
              {
                   if(t>dis[j])
                   {
                       t=dis[j];
                       pos=j;            
                   }
              }
         }
         hash[pos]=1;
         if(pos==n) break;
         for(int j=0;j<n;j++)
         {
              if(hash[j]==0)
              {
                   if(map[pos][j]!=inf&&dis[pos]+map[pos][j]<dis[j])
                       dis[j]=map[pos][j]+dis[pos];
              }
         }
    }
}
int main()
{
    int x,y,v;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
         for(int i=0;i<n;i++)
         {
              dis[i]=inf;
              hash[i]=0;
              for(int j=0;j<n;j++)
              {
                  map[i][j]=inf;        
              }
         }
         for(int i=1;i<=m;i++)
         {
              scanf("%d%d%d",&x,&y,&v);
              if(x!=y&&map[x][y]>v)
              {
                   map[x][y]=map[y][x]=v;
              }
         }
         scanf("%d%d",&s,&t);
         dijstra();
         if(dis[t]!=inf)//要判断s到t是否有路。
         {
              printf("%d\n",dis[t]); 
         }
         else
         {
              printf("-1\n");
         }
    }
    //system("pause");
    return 0;
}

编辑器加载中...

posted on 2011-07-16 20:45  枫叶飘泪  阅读(152)  评论(0编辑  收藏  举报