zoukankan      html  css  js  c++  java
  • hdu 2066 一个人的旅行

    点击打开链接

    Dij

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAX 1007483647  //切记尽量不要超过2147483648/2
    int map[1200][1200];    //模拟构造个无向图
    int s[1200];            //存放与草儿家连接的地方
    int d[1200];            //存放草儿想到的地方
    int T,S,D,max;           ///注意max的作用,记录出现地方的最大值(即,地方的代码1,2,3……)
    int count[1200];        //存放从某起点到任意终点的时间
    int flag[1200];         //作变量使用,仅此而已
     
    int dijkstra(int x)
    {
             int i,j,k,d_min,d_ans;          //d_min 即在此循环中的最小量,作变量使用,d_ans为临时最最小答案
             memset(count,0,sizeof(count));  //初始化很重要
             memset(flag,0,sizeof(flag));    //
             for(i=1;i<=max;i++)
             {
                       count[i] = map[x][i];
                       flag[i]=0;
             }
             count[x]=0;
             flag[x]=1;
             for(i=1;i<=max;i++){
                       d_min=MAX;
                       for(j=1;j<=max;j++){
                                if(flag[j]==0&&count[j]<d_min){
                                         d_min = count[j];
                                         k=j;
                                }
                       }
                       flag[k]=1;
                       for(j=1;j<=max;j++){
                                if(flag[j]==0&&count[j]>count[k]+map[k][j])
                                         count[j] = count[k]+map[k][j];
                       }
             }
             d_min=MAX;
             for(i=1;i<=D;i++){      ////
                       if(count[d[i]]<d_min)
                                d_min=count[d[i]];
             }
             return d_min;
    }
     
    int main()
    {
             int i,j,a,b,time,m_min,m_ans;    ////
             while(scanf("%d%d%d",&T,&S,&D)!=EOF)
             {
                       m_ans=MAX;
                       max=0;
                       for(i=0;i<1200;i++)
                                for(j=0;j<1200;j++)
                                         map[i][j]=MAX;
                       for(i=0;i<T;i++)
                       {
                                scanf("%d%d%d",&a,&b,&time);
                                if(map[a][b]>time)
                                         map[a][b]=time;
                                if(map[b][a]>time)
                                         map[b][a]=time;
                                if(a>max)max = a;
                                if(b>max)max = b;
                       }
                       for(i=1;i<=S;i++)
                                scanf("%d",&s[i]);
                       for(i=1;i<=D;i++)
                                scanf("%d",&d[i]);
                       for(i=1;i<=S;i++)           ///依次从与草儿家相连的地方计算
                       {
                                m_min=dijkstra(s[i]);
                                if(m_min<m_ans)
                                         m_ans=m_min;
                       }
                       printf("%d\n",m_ans);
             }
             return 0;
    }
    


  • 相关阅读:
    URL重定向功能与APS.NET的固化功能结合
    How can I share types when generate WebSevice proxies using local paths
    C# Coding Standard Naming Conventions and Style
    VS自动化对象模型
    odac 如何捕捉错误odac 如何捕捉错误
    webbrower应用实例
    webbrower在同一个窗口打开新增窗口
    [DELPHI]$2501錯誤處理
    暴力破解例子
    webbrower连接在新form中显示
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365389.html
Copyright © 2011-2022 走看看