zoukankan      html  css  js  c++  java
  • poj2387 Til the Cows Come Home(Dijkstra)

    题目链接

    http://poj.org/problem?id=2387

    题意

    有n个路标,编号1~n,输入路标编号及路标之间相隔的距离,求从路标n到路标1的最短路径(由于是无向图,所以也就是求从路标1到路标n的最短路径)。

    思路

    最短路径问题,由于结点数目最多可以有1000个,用Floyd算法应该会超时,而且做了之后发现输入会有相同的边,使用SPFA算法会麻烦一些,所以这里使用Dijkstra算法求解。

    代码

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 const int INF = 0x3f3f3f;
     8 const int N = 1000 + 10;
     9 int map[N][N];
    10 int dist[N];
    11 int visit[N];
    12 int n, t;
    13 
    14 void dijkstra()
    15 {
    16     for (int i = 1; i <= n; i++)
    17         dist[i] = map[1][i];
    18     dist[1] = 0;
    19     int min_dist, now = 1;
    20     for (int i = 1; i <= n; i++)
    21     {
    22         visit[now] = 1;
    23         min_dist = INF;
    24         for (int j = 1; j <= n; j++)
    25         {
    26             if (!visit[j] && dist[j] < min_dist)
    27             {
    28                 min_dist = dist[j];
    29                 now = j;
    30             }
    31         }
    32         visit[now] = 1;
    33         for (int j = 1; j <= n; j++)
    34             dist[j] = min(dist[j], dist[now] + map[now][j]);
    35     }
    36     printf("%d
    ", dist[n]);
    37 }
    38 
    39 int main()
    40 {
    41     //freopen("poj2387.txt", "r", stdin);
    42     scanf("%d%d", &t, &n);
    43     memset(map, INF, sizeof(map));
    44     int a, b, d;
    45     for (int i = 0; i < t; i++)
    46     {
    47         scanf("%d%d%d", &a, &b, &d);
    48         if(map[a][b] > d)    //对于相同的边,取权值最小的那条
    49             map[a][b] = map[b][a] = d;
    50     }
    51     dijkstra();
    52     return 0;
    53 }
  • 相关阅读:
    centos8.0 安装 jenkins
    No match for argument: mysql-community-server Error: Unable to find a match: mysql-community-server
    Navicat 远程连接 centos8.0
    centos8.0 安装 mysql
    -bash: java-version: command not found
    centos8.0 安装 JDK1.8
    [Err] 1062
    android之Fragment基础详解(一)
    Android之RecyclerView(一)
    Android之ProgressBar
  • 原文地址:https://www.cnblogs.com/sench/p/7977701.html
Copyright © 2011-2022 走看看