zoukankan      html  css  js  c++  java
  • hdu2066(迪杰斯特拉算法模板)

    这道题要注意重边问题= =

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1000;
    int G[2*maxn][2*maxn];
    int f[2*maxn],d[2*maxn];
    #define inf 100000000
    int dijk() 
    {
        int ans=0;
         memset(f,0,sizeof(f));
         for(int i=0;i<=1000;i++)
         {
             d[i]=inf;
         }
         d[0]=0;
         for(int i=0;i<=1000;i++)
         {
             int x,min=inf;
             for(int v=0;v<=1000;v++)
             {
                 if(!f[v]&&d[v]<min)
                 {
                     min=d[v];
                     x=v;
                 }
             }
             f[x]=1;
             for(int u=0;u<=1000;u++)
             {
                 if(d[x]+G[x][u]<d[u])
                 d[u]=d[x]+G[x][u];
             }
         }
         return 0;
         } 
    int main()
    {
        int T,s,D,a,b,h;
        while(scanf("%d %d %d",&T,&s,&D)!=EOF)
        {
            for(int i=0;i<=1000;i++)
            {
                for(int j=0;j<=1000;j++)
                G[i][j]=inf; 
            } 
            for(int i=1;i<=T;i++)
            {
                scanf("%d %d %d",&a,&b,&h);
                if(h<G[a][b])
                {
                G[a][b]=h;
                G[b][a]=h;//有多个权值,选择最小的权值
               }
            }
        int x;
        for(int i=0;i<s;i++)
        {
        scanf("%d",&x);
        G[0][x]=0;
        G[x][0]=0;
        }    
        int ans=inf;
        dijk();
        int y;
        for(int i=0;i<D;i++)
        {
            scanf("%d",&y);
            if(d[y]<ans)
            ans=d[y];
        }
        printf("%d
    ",ans);
    }
    return 0;
    }
            
        
  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日博客
    每日博客
    结对作业之全国疫情统计可视化地图
    每日博客
  • 原文地址:https://www.cnblogs.com/NaCl/p/4873103.html
Copyright © 2011-2022 走看看