zoukankan      html  css  js  c++  java
  • [原]poj-2680-Choose the best route-dijkstra(基础最短路)

    题目大意: 已知n 个点,m条路线,s为终点;给出m条路线及其权值;给出w个起点,求最短路!

    思路:基础的dijkstra,有向无环正权最短路,只要把终点和起点 reverse考虑便可。

    AC代码如下:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    #define INF 1000000
    #define M 1010
    int n, m, s;
    int d[M];
    int w[M][M];
    int v[M];
    
    void dijkstra(int s)
    {
      memset(v,0,sizeof(v));
      memset(d,INF,sizeof(d));
      d[s] = 0;
      for(int i = 0; i < n; i++)
      {
        int x, m = INF;                //WA了半天找不到的bug,就是这里;开始忘了放在循环里了,ORZ。。。所以m会一直是0.。不WA才怪。
        for(int j = 1; j <= n; j++)
         if(!v[j]&&d[j] <= m) m = d[x = j];
        v[x] = 1;
    
        for(int j = 1; j <= n; j++)
          d[j] = d[j] < d[x] + w[x][j]? d[j]:d[x] + w[x][j];
    
      }
    }
    
    void init(int n)
    {
      for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
          w[i][j] = INF;
    }
    
    int main()
    {
      while(scanf("%d%d%d",&n, &m, &s) == 3)
      {
        init(n);
        for(int i = 0; i < m; i++)
        {
          int a,b,c;
          scanf("%d%d%d",&a,&b,&c);
          if(w[b][a] > c)
            w[b][a] = c;
        }
        dijkstra(s);
    
        int la,st,Min = INF;
        scanf("%d",&la);
    
        for(int i = 0; i < la; i++)
        {
          scanf("%d",&st);
          if(d[st] < Min) Min = d[st];
          //cout<<st<<"*"<<d[st]<<endl;
        }
        if(Min < INF)
         printf("%d
    ",Min);
        else
         cout<<"-1"<<endl;
      }
      return 0;
    
    }
    


    作者:u011652573 发表于2014-3-6 0:18:03 原文链接
    阅读:92 评论:0 查看评论
  • 相关阅读:
    vue 中动画配置
    vue hash模式和404页面的配置
    vue 组件用法
    vue set方法
    vue 改变插值方法
    vue 接口统一管理
    Oracle同义词(Synonym)创建删除
    ASP.NET Core中间件实现分布式 Session
    plsql 导入导出表数据与表结构
    css3缩放 transform: scale() 使用缩放之后顶点对齐问题
  • 原文地址:https://www.cnblogs.com/ZiningTang/p/3834758.html
Copyright © 2011-2022 走看看