旅游规划

城市为结点;

公路为边:权重1:距离。权重2:收费。

单源最短路:Dijkstra-距离。等距离按时收费更新。

核心算法:

void Dijkastra(Vertex s)
{
       while(1){
        V=未收录顶点中dist最小值;
        if(这样的V不存在)
          break;
        collection[V]=true;
        for(V的每个邻接点)
           if(collection[W]==false)
              if(dist[V]+E<V,W><dist[w])
                { dist[W]=dist[V]+E<V,W>;
                   path[W]=V;
                   cost[W]=cost[V]+c<V,W>;}
              else if((dist[V]+E<V,W>==dist[W])&&(cost[V]+c<V,W><cost[W]))
           { cost[W]=cost[v]+c<V,W>;
            path[W]=V;}
     }
}

其他类似问题

要求数最短路径有多少条

  • count[s]=1;
  • 如果找到更短路:count[w]=count[v];
  • 如果找到等长路:count[w]+=count[v];

要求边数更少的最短路

  • count[s]=0;
  • 如果找到更短路:count[w]=count[v]+1;
  • 如果找到等长路:count[w]=count[v]+1;




猜你喜欢

转载自blog.csdn.net/qq_42020563/article/details/80547901