Dijkstra 最短路径

来源:互联网 发布:淘宝网抢拍软件 编辑:程序博客网 时间:2024/04/27 17:04

hdu1874

 #include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<cstdio>#include<string>#include<set>#include<map>#include<queue>#include<vector>#include<stack>using namespace std;#define ll long long#define cl(a,b) memset(a,b,sizeof(a))#define N 50005#define MAXN 100005#define mod 1000000007#define INF 999999int map1[201][201],mark[201];int n,m,s,e,f[201];void dijkstra(){    int i,j,k,min;    memset(mark,0,sizeof(mark));    for(i=0;i<n;i++)        f[i]=map1[s][i];    f[s]=0;    for(i=0;i<n;i++)    {        min=INF;        for(j=0;j<n;j++)        {            if(!mark[j]&&min>f[j])            {                k=j;                min=f[j];            }        }        if(min==INF)break;        mark[k]=1;        for(j=0;j<n;j++)            if(!mark[j]&&f[j]>f[k]+map1[k][j])            f[j]=map1[k][j]+f[k];    }    if(f[e]!=INF) printf("%d\n",f[e]);    else printf("-1\n");}int main(){    int a,b,l,i,j;    while(~scanf("%d%d",&n,&m))    {        for(i=0;i<n;i++)            for(j=0;j<n;j++)                map1[i][j]=INF;        for(i=0;i<m;i++)        {            scanf("%d%d%d",&a,&b,&l);            if(map1[a][b]>l)            map1[a][b]=map1[b][a]=l;        }        scanf("%d%d",&s,&e);        dijkstra();    }    return 0;}

0 0