zoukankan      html  css  js  c++  java
  • hdu2680 Choose the best route

    多点到一点的最短距离,因为点的编号是从1到n所以把0作为新的起点

    将所有可能的起点跟0连接,转换为求单源最短路径用dijkstra即可。

    1 #include <stdio.h>
    2 #include <string.h>
    3
    4  #define INF 999999999
    5  #define MAX 1007
    6
    7 int n,map[MAX][MAX];
    8 int dijkstra(int str, int end){
    9 bool hash[MAX];
    10 int i,min,path[MAX];
    11
    12 for(i = 0; i <= n; i++){
    13 hash[i] = true;
    14 path[i] = INF;
    15 }
    16 hash[str] = false;
    17 path[str] = 0;
    18 while(str != end){
    19 for(i = 0; i <= n; i++){
    20 if(map[str][i])
    21 if(path[i] > path[str] + map[str][i])
    22 path[i] = path[str] + map[str][i];
    23 }
    24
    25 min = INF;
    26 for(i = 0; i <= n; i++){
    27 if(path[i] < min && hash[i]){
    28 min = path[i];
    29 str = i;
    30 }
    31 }
    32 if(min == INF)
    33 break;
    34 hash[str] = false;
    35 }
    36 return path[end];
    37 }
    38
    39 int main (void){
    40 int i,m,s,p,q,t,w,ans;
    41 while(scanf("%d%d%d",&n,&m,&s)!=EOF){
    42 memset(map,0,sizeof(map));
    43 for(i = 0; i < m; i++){
    44 scanf("%d%d%d",&p,&q,&t);
    45 if(!map[p][q])
    46 map[p][q] = t;
    47 else if(map[p][q] > t)
    48 map[p][q] = t;
    49 }
    50 scanf("%d",&w);
    51 for(i = 0; i < w; i++){
    52 scanf("%d",&q);
    53 map[0][q] = 1;
    54 }
    55 ans = dijkstra(0,s);
    56 if(ans != INF)
    57 printf("%d\n",ans - 1);
    58 else
    59 printf("-1\n");
    60 }
    61 return 0;
    62 }
  • 相关阅读:
    第四章作业
    第二章上机实验报告
    对二分法的理解和结对编程情况
    Mysql与sql server的列的合并
    C#中如何去除窗体默认的关闭按钮
    C# 实现WinForm窗口最小化到系统托盘代码,并且判断左右鼠标的事件
    running total sql 2012+
    Poqwe Pivot error
    事务
    ssis 导EXCEL ERROR
  • 原文地址:https://www.cnblogs.com/deadblue/p/2022158.html
Copyright © 2011-2022 走看看