zoukankan      html  css  js  c++  java
  • HDU 2544 最短路

    最短路

    http://acm.hdu.edu.cn/showproblem.php?pid=2544


    Problem Description
    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

     
    Input
    输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
    输入保证至少存在1条商店到赛场的路线。
     
    Output
    对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
     
    Sample Input
    2 1
    1 2 3
    3 3
    1 2 5
    2 3 5
    3 1 2
    0 0
     
    Sample Output
    3
    2
     
    解题代码:
     
    floyd算法:
     1 #include <math.h>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 using namespace std;
     7 
     8 const int max_n = 105;
     9 const int INF = 0x3fffffff;
    10 
    11 int map[max_n][max_n];
    12 
    13 int main()
    14 {
    15     int n, m;
    16     while (~scanf ("%d%d", &n, &m) && n&&m)
    17     {
    18         for (int i = 0; i <= n; i ++)
    19             for (int j = 0; j <= n; j ++)
    20                 map[i][j] = INF;
    21         for (int i = 1; i <= m; i ++)
    22         {
    23             int a, b, c;
    24             scanf ("%d%d%d", &a, &b, &c);
    25             map[a][b] = map[b][a] = c;
    26         }
    27         for (int i = 1; i <= n; i ++)
    28         {
    29             for (int j = 1; j <= n; j ++)
    30                 for (int k = 1; k <= n; k ++)
    31                     if (map[j][k] > map[j][i] + map[i][k])
    32                     map[j][k] = map[k][j] = map[j][i] + map[i][k];
    33         }
    34         printf ("%d
    ", map[1][n]);
    35     }
    36     return 0;
    37 }
    View Code

    dijkstra算法:

     1 // File Name: 最短路 dijstra 2544.2.cpp
     2 // Author: sheng
     3 // Created Time: 2013年07月18日 星期四 16时27分47秒
     4 
     5 #include <stdio.h>
     6 #include <math.h>
     7 #include <iostream>
     8 #include <string.h>
     9 using namespace std;
    10 
    11 const int max_n = 104;
    12 const int INF = 0x3fffffff;
    13 int map[max_n][max_n];
    14 int vis[max_n], dis[max_n];
    15 
    16 int main()
    17 {
    18     int n, m;
    19     while (~scanf("%d%d", &n, &m) && n && m)
    20     {
    21         for (int i = 1; i <= n; i ++)
    22             for (int j = 1; j <= n; j ++)
    23                 map[i][j] = INF;
    24         for (int i = 0; i < m; i ++)
    25         {
    26             int a, b, c;
    27             scanf ("%d%d%d", &a, &b, &c);
    28             map[a][b] = map[b][a] = c;
    29         }
    30         memset (vis, 0, sizeof (vis));
    31         for (int i = 1; i <= n; i ++)
    32             dis[i] = map[1][i];
    33         vis[1] = 1;
    34         int k;
    35         for (int i = 1; i < n; i ++)
    36         {
    37             int min = INF;
    38             for (int j = 1; j <= n; j ++)
    39             {
    40                 if (!vis[j] && min > dis[j])
    41                 {
    42                     min = dis[j];
    43                     k = j;
    44                 }
    45             }
    46             vis[k] = 1;
    47             for (int j = 1; j <= n; j ++)
    48             {
    49                 if (!vis[j] && min + map[k][j] < dis[j])
    50                     dis[j] = min + map[k][j];
    51             }
    52         }
    53         printf ("%d
    ", dis[n]);
    54     }
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    在国外搭建 Web 服务器
    双向循环链表的实现
    使用C/C++扩展Python
    用C语音编写python的扩展模块,也就是python调c库
    《扩展和嵌入python解释器》1.4 模块方法表和初始化函数
    linux如何使用NFS挂载文件系统
    linux用户管理
    eims系统新增一级目录菜单流程
    Hadoop参考学习
    Got error: 1045:
  • 原文地址:https://www.cnblogs.com/shengshouzhaixing/p/3195314.html
Copyright © 2011-2022 走看看