hdu1874

来源:互联网 发布:易建联新秀数据 编辑:程序博客网 时间:2024/06/08 16:27

//典型的迪斯拉算法。。。。

//感觉这个和最小生成树的模板很像呀‘

#include<iostream>#include<string.h>using namespace std;const int MAX=99999999; int n,m;int map[203][203],low[203],visit[203];void dijkstrs(int start,int end){    memset(visit,0,sizeof(visit));    int i,j,pos;    visit[start]=1;    for(i=0;i<n;i++)    {        low[i]=map[start][i];    }    low[start]=0;    for(i=1;i<n;i++)    {        int min=MAX;        pos=start;//这个和最小生成树的那个不一样,。。是关键。。。        for(j=0;j<n;j++)        {             if(visit[j]==0&&min>low[j])             {                 min=low[j];                 pos=j;             }        }        visit[pos]=1;        for(j=0;j<n;j++)        {            if(visit[j]==0&&map[pos][j]<MAX)            {                int ne=low[pos]+map[pos][j];                if(ne<low[j])                   low[j]=ne;            }        }    }}int main(){     while(scanf("%d%d",&n,&m)!=EOF)   {      int i,j;      for(i=0;i<n;i++)      {          for(j=0;j<n;j++)              map[i][j]=MAX;      }      int a,b,c;      for(i=1;i<=m;i++)      {         cin>>a>>b>>c;         if(map[a][b]>c)         {             map[a][b]=c;             map[b][a]=c;         }      }      int start,end;      scanf("%d%d",&start,&end);       dijkstrs(start,end);      if(low[end]==MAX)          cout<<"-1"<<endl;      else      cout<<low[end]<<endl;   }}


0 0
原创粉丝点击