Dijkstra算法

来源:互联网 发布:左飞 算法之美pdf 编辑:程序博客网 时间:2024/05/28 06:05
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define inf 0x3f3f3f3fint map[205][205],d[205],v[205],n,m;int Dijkstra(int s,int t){    int i,j,min,k;    memset(d,inf,sizeof d);    memset(v,0,sizeof(v));    d[s]=0;    for(i=1;i<n;i++)    {        min=inf;        for(j=0;j<n;j++)        {            if(!v[j]&&min>d[j])            {                min=d[j];                k=j;            }        }        v[k]=1;        for(j=0;j<n;j++)        {            if(d[j]>d[k]+map[k][j])            d[j]=d[k]+map[k][j];        }    }    return d[t];}int main(){    int i,j,t,s,a,b,x,ans;    while(~scanf("%d%d",&n,&m))    {        memset(map,inf,sizeof(map));        for(i=1;i<=m;i++)        {            scanf("%d%d%d",&a,&b,&x);            if(map[a][b]>x)            map[a][b]=map[b][a]=x;        }        scanf("%d%d",&s,&t);        ans=Dijkstra(s,t);        if(ans!=inf)        printf("%d\n",ans);        else            printf("-1\n");    }    return 0;}

0 0