最短路的变形 一个人的旅行 hdu2066

草儿家编号为0,与相邻的城市车程设为0,一次dij即可

#include <iostream>
#include <memory.h>
using namespace std;
#define Max_V  1005
const int IN = (1<<28);
int T,S,D;
int G[Max_V+1][Max_V+1];
int des[Max_V+1];
int dist[Max_V+1];
int visited[Max_V+1];
void dij()
{
    for( int i = 0; i <= Max_V; i++ )
        dist[i] = G[0][i];
    dist[0] = 0;
    visited[0] = 1;
    while(1)
    {
        int MinV = 0, Min = IN;
        for( int i = 1; i <= Max_V; i++ )
        {
            if( !visited[i] && dist[i] < Min )
            {
                Min = dist[i];
                MinV = i;
            }
        }
        if( !MinV )
            break;
        else
        {
            visited[MinV] = 1;
            for( int i = 1; i <= Max_V; i++ )
            {
                if( !visited[i] && dist[i] > dist[MinV] + G[MinV][i] )
                {
                    dist[i] = dist[MinV] + G[MinV][i];
                }
            }
        }
    }
}
int main()
{
    while( cin >> T >> S >> D )
    {
        memset(visited, 0, sizeof(visited));
        memset(dist, 0, sizeof(dist));
        memset(G, 0, sizeof(G));
        memset(des, 0, sizeof(des));
        for( int i =  0; i <= Max_V; i++ )
            for( int j = 0; j <= Max_V; j++ )
        {
            if( i==j )
                G[i][j] = 0;
            else
                G[i][j] = IN;
        }
        while( T-- )
        {
            int Begin,End,Length;
            cin >> Begin >> End >> Length;
            if( G[Begin][End] > Length )
            {
                G[Begin][End] = Length;
                G[End][Begin] = Length;
            }
        }
        while( S-- )
        {
            int station;
            cin >> station;
            G[0][station] = 0;
            G[station][0] = 0;
        }
        for( int i = 1; i <= D; i++ )
            cin >> des[i];
        dij();
        int MinTime = IN;
        for( int i = 1; i <= D; i++ )
        {
            MinTime = min( dist[des[i]], MinTime);
        }
        cout << MinTime << endl;
    }
    return 0;
}



猜你喜欢

转载自blog.csdn.net/xutian_curry/article/details/80213368
今日推荐