zoukankan      html  css  js  c++  java
  • [SOJ] 畅通工程续

    Description

     某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。

    现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。

    Input

     本题目包含多组数据。
    每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
    接下来是M行道路信息。每一行有三个整数A,B,X(0<A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
    再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。

    当N=0且M=0时,表示输入数据结束。

    Output

     对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.

    Sample Input
     Copy sample input to clipboard
    3 3
    0 1 1
    0 2 3
    1 2 1
    0 2
    3 1
    0 1 1
    1 2
    0 0
    Sample Output
    2
    -1

    解题思路: 就是Dijiskra算法
    //Dijiskra algorithm
    #include<iostream>
    #include<memory>
    #include<algorithm>
    using namespace std;
    
    const int MAX = 205;
    const int INF = 0x3f3f3f3f;
    int d[MAX];   //最短路径数组
    bool v[MAX];  //已访问节点数组
    int edge[MAX][MAX];
    int n, m, start, e;
    
    void Dijiskra(int start)
    {
    //initial
      memset(v, false, sizeof(v));
      for(int i=0;i<MAX;i++)
        d[i]=INF;
    
    //start at node 'Start'
      d[start]=0;
      for(int i=0;i<n;i++)
      {
         int temp;
         int minx = INF;
         for(int j=0;j<n;j++)
         {
          if(!v[j]&&d[j]<minx)
          {
            temp=j;
            minx=d[j];
          }
         }
         v[temp]=true;
    
         //refresh distance array
         for(int i=0;i<n;i++)
          d[i]=min(d[i], d[temp]+edge[temp][i]);
      } 
    }
    
    int main()
    {
      while(cin>>n>>m&&n!=0&&m!=0)
      {
        memset(edge, INF, sizeof(edge));
        int a, b, x;
    
        for(int i=0;i<m;i++)
        {
          cin>>a>>b>>x;
          edge[a][b]=x;
          edge[b][a]=x;
        }
    
        cin>>start>>e;
    
        Dijiskra(start);
    
        if(d[e]==INF)cout<<-1<<endl;
        else cout<<d[e]<<endl;
      }
    
      return 0;
    }
    

      

  • 相关阅读:
    python多线程编程(6): 队列同步
    Python验证Url地址的正则表达式
    centos下redis安全配置相关
    redis
    mysql安装 配置
    centos7安装python3 环境变量配置 django安装 以及tab补全功能
    saltstack 与常用服务部署
    vim
    Linux系统基础优化及常用命令
    Shell 基本命令
  • 原文地址:https://www.cnblogs.com/KennyRom/p/6245578.html
Copyright © 2011-2022 走看看