HDOJ 1874

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


posted on 2014-04-30 18:35  wangzhili  阅读(126)  评论(0编辑  收藏  举报