杭电 1874 畅通工程续

#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;

}

编辑器加载中...

你可能感兴趣的:(杭电)