zoukankan      html  css  js  c++  java
  • HDU 2680 Choose the best route 最短路问题

    题目描述:Kiki想去他的一个朋友家,他的朋友家包括所有的公交站点一共有n 个,一共有m条线路,线路都是单向的,然后Kiki可以在他附近的几个公交站乘车,求最短的路径长度是多少。

    解题报告:这道题的特点就是有多个起点,但是这并不影响我们使用迪杰斯特拉来解这道题,和前面出现的一个题目一样,我们可以增加一个虚拟的起点,然后令所有的真实的起点到这个虚拟的起点的距离都赋为1,然后就成功的转化成了单源的最短路问题了,并且是单个终点,然后用迪杰斯特拉就OK了,值得注意的就是这题里面的路线都是单向的,即所给出的图的有向图。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 const int MAX = 1000+5,INF = 0xfffff;
     5 int map[MAX][MAX],T[MAX],visit[MAX],n,m,s,e,w;
     6 int main() {
     7     int a,b,len;
     8     while(scanf("%d%d%d",&n,&m,&e)!=EOF) {
     9         n++;
    10         s = n;
    11         for(int i = 1;i<=n;++i) {
    12             T[i] = INF;
    13             for(int j = 1;j<=n;++j)
    14             map[i][j] = INF;
    15         }
    16         for(int i = 1;i<=m;++i) {
    17             scanf("%d%d%d",&a,&b,&len);
    18             map[a][b] = std::min(len,map[a][b]);
    19         }
    20         
    21         scanf("%d",&w);  //没有起点与终点相同的情况
    22         while(w--) {
    23             scanf("%d",&a);
    24             map[a][s] = map[s][a] = 1;
    25         }
    26         memset(visit,0,sizeof(visit));
    27         T[s] = 0;
    28         T[0] = INF;
    29         while(1) {
    30             for(int i = 1;i<=n;++i)
    31             if(!visit[i]&&(T[s]+map[s][i])<T[i])
    32             T[i] = T[s]+map[s][i];
    33             visit[s] = 1;
    34             bool flag = 1;
    35             s = 0;
    36             for(int i = 1;i<=n;++i)
    37             if(!visit[i]&&T[i]<T[s]) {
    38                 s = i;
    39                 flag = 0;
    40             }
    41             if(flag)
    42             break;
    43         }
    44         printf("%d
    ",T[e]>INF-5? -1:T[e]-1);
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    数组中的每一个对象执行一次方法:makeObjectsPerformSelector
    $.each() each
    JQ js选择节点操作
    Sublime Text 3 快捷键
    TotoiseSVN的基本使用方法
    Hbuilder快捷键
    获取网页内容区域各种高/宽汇总
    TP操作
    xhr接收php://output的二进制文件,并转换成excel表格
    Go语言的%d,%p,%v等占位符的使用
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3209363.html
Copyright © 2011-2022 走看看