• hdu 2066 一个人的旅行


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

    题目分类:dijkstra算法

    错误点:不知道点的范围

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define INF 10000000
    
    const int maxv=2000;
    
    int cost[maxv][maxv];
    int d[maxv];
    bool vis[maxv];
    
    int x[2000];
    int y[2000];
    int path[2000];
    
    
    int e,s,di;
    int a,b,tt;
    int ans;
    int ver;
    
    void dijkstra(int n,int st)
    {
        int i,j,minn,pre;
        memset(vis,0,sizeof(vis));
    
        vis[st]=1;
    
        for(i=0;i<n;i++)
        {
            d[i]=cost[st][i];
            path[i]=st;
        }
    
        d[st]=0;
        path[st]=-1;
        pre=st;
    
        for(i=1;i<n;i++)
        {
            for(j=1;j<n;j++)
            {
                if(vis[j]==0&&d[pre]+cost[pre][j]<d[j])
                    d[j]=d[pre]+cost[pre][j],path[j]=pre;
            }
            minn=INF;
            for(j=1;j<n;j++)
            {
                if(vis[j]==0&&d[j]<minn)
                    minn=d[j],pre=j;
            }
            vis[pre]=1;
        }
        return ;
    }
    
    
    int main()
    {
        while(scanf("%d %d %d",&e,&s,&di)!=EOF)
        {
            for(int i=0;i<1200;i++)
            {
                for(int j=0;j<1200;j++)
                {
                    cost[i][j]=INF;
                }
                cost[i][i]=0;
            }
    
            ver=0;
    
            for(int i=0;i<e;i++)
            {
                scanf("%d %d %d",&a,&b,&tt);
    
    
                cost[a][b]=min(tt,cost[a][b]);
                cost[b][a]=min(tt,cost[a][b]);
    
                ver=max(max(ver,a),b);
            }
    
            for(int i=0;i<s;i++)
            {
                scanf("%d",&x[i]);
                cost[0][x[i]]=0;
                cost[x[i]][0]=0;
            }
    
            for(int i=0;i<di;i++)
            {
                scanf("%d",&y[i]);
            }
    
            ans=INF;
    
            dijkstra(ver+1,0);
    
            for(int j=0;j<di;j++)
            {
                ans=min(ans,d[y[j]]);
            }
    
            printf("%d
    ",ans);
    
        }
        return 0;
    }
    anytime you feel the pain.hey,refrain.don't carry the world upon your shoulders
  • 相关阅读:
    Dubbox小案例
    Maven项目
    网络命名空间和网桥的基本操作命令
    基于容器制作镜像
    docker命令的基本操作
    hbase 的一些坑
    并查集
    二叉树的递归遍历和非递归遍历
    比较器的使用
    用数组结构实现大小固定的队列和栈
  • 原文地址:https://www.cnblogs.com/gaoss/p/4915970.html
Copyright © 2020-2023  润新知