zoukankan      html  css  js  c++  java
  • 单源最短路问题模板

    最近开始学习最短路算法。

    单源最短路问题1(Bellman-Ford算法)

    不存在负圈时,

     1 const int INF = 0x3f3f3f3f;
     2 struct edge{
     3     int from, to, cost;
     4 };
     5 edge es[maxn_e]; //
     6 int d[maxn_v]; //最短距离
     7 int v,e; //v是定点数,e是边数
     8 void shorttest_path(int s){
     9     for(int i = 0; i<v; i++) d[i] = INF;
    10     d[s] = 0;
    11     while(1){
    12         bool update = false;
    13         for(int i = 0; i<e; i++){
    14             edge e = es[i];
    15             if(d[e.from] != INF && d[e.to]>d[e.from]+d[e.cost]){
    16                 d[e.to] = d[e.from]+d[e.cost];
    17                 update = true;
    18             }
    19         }
    20         if(!update) break;
    21     }
    22 }

    最短路不会经过同一顶点两次(也就是说最多通过v-1条边) while(1)最多执行v-1次,时间复杂度o(v*e).

    如果存在从s可达的负圈,那么在第v次循环中也会更新d的值,所以可以用来检查负圈。

  • 相关阅读:
    元组类型
    字符串类型
    列表类型
    python 循环
    python语句
    python运算符
    python1
    软件管理
    rpm yum
    LVM
  • 原文地址:https://www.cnblogs.com/littlepear/p/5412189.html
Copyright © 2011-2022 走看看