HDU 2066 单源最短路径(Dijkstra算法) 一个人的旅行

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066

分析:这题主要考虑的地方是,有多个起点,也有多个终点,如果直接用Dijkstra很容易超时,但是,我们可以将真正起点定为0,以前那些起点到0的最短时间是0,也样就只有一个起点,和多个终点,只要求出从0点到那些终点的最小的一个就OK了!

#include
#include
#include
#include
#include
#include
#include

using namespace std;
const int maxn=1000+100;
const int inf=10000000;

int map[maxn][maxn];
int dis[maxn];
bool vis[maxn];
int x[maxn],y[maxn];

int Dijkstar(int et,int M){
    for(int i=0;i<=M;++i)
        dis[i]=map[0][i],vis[i]=false;
    vis[0]=true;
    while(true){
        int min=inf,mj=-1;
        for(int i=0;i<=M;++i)
            if(!vis[i]&&dis[i]dis[mj]+map[mj][i])
                dis[i]=dis[mj]+map[mj][i];
    }
    return dis[et];
}

int main(){
    int t,s,d;
    while(~scanf("%d%d%d",&t,&s,&d)){
        for(int i=0;i>a>>b>>c;
            if(c


你可能感兴趣的:(ACM_算法题解)