HDOJ 1874

来源:互联网 发布:淘宝怎么举报卖家假货 编辑:程序博客网 时间:2024/06/07 00:26

#include<stdio.h>#include<string.h>int map[205][205],dist[205];int vis[205],n,m,s,t,s;void init1(){    int i,j;    memset(vis,0,sizeof(vis));    for(i = 0;i < n;i ++)    {        for(j = 0;j < n;j ++)        {            if(i != j)                map[i][j] = 1 << 30;            else                map[i][j] = 0;        }    }    return ;}void init2(){    int i;    for(i = 0;i < n;i ++)        dist[i] = map[s][i];    return ;}void Dijkstra(){    int i,j,k,min;    vis[s] = 1;    for(i = 0;i < n;i ++)    {        min = 1 << 30;        k = -1;        for(j = 0;j < n;j ++)        {            if(!vis[j] && dist[j] < min)            {                min = dist[j];                k = j;            }        }        if(k == -1)            return ;        vis[k] = 1;        for(j = 0;j < n;j ++)        {            if(!vis[j] && dist[j] > map[k][j]+dist[k])                dist[j] = map[k][j]+dist[k];        }    }    return ;}int main(void){    int i,j;    int a,b,x;    while(~scanf("%d%d",&n,&m))    {        init1();        while(m--)        {            scanf("%d%d%d",&a,&b,&x);            if(map[a][b] > x)                map[a][b] = map[b][a] = x;        }        scanf("%d%d",&s,&t);        init2();        Dijkstra();        if(dist[t] != 1 << 30)            printf("%d\n",dist[t]);        else            printf("-1\n");    }    return 0;}


0 0