zoukankan      html  css  js  c++  java
  • 最短路_搜索

    搜索实现最短路

    设置一个dis数组,dis[i]代表某点(以原点为例)到 i 点的最短距离。
    更新原则: 遍历点u想连的点v,若 dis[u] + edge[u].w < dis[v] , 则更新dis[v] = dis[u] + edge[u].w

    • 标记数组的问题
      标记数组check,标记的是某点是否在队列中,如果不在,则入队。 而不是标记的是否被访问过。
      因为入队的原因是,原点到该点的最短距离变了,因此与该点有关系的点 的距离也有可能发生变化,所以要重新遍历这些点。所以已经在队列里的点i,允许dis[i]继续更新。 这样就解决了 点u到点v有多路径,无法选择最短的那一条路的问题。

    • 记录到某点i最短路的条数

      设置数组in,in[i]代表原点到点i最短路的条数。
      在最短路实现过程中

      
      for(i = 0; i < con[x].size(); i++)  //与点x想连的边
      	{
      		to = con[x][i].to;
      		w = con[x][i].w;
      		if(dis[to] > dis[x] + w)
      		{
      			dis[to] = dis[x] + w;
      			in[to] = 1;                    //每当最短路发生变化时,重新将in数组置为1. 使之前纪录的“最短路”条数作废。
      
      			if(check[to] == 0)
      			{
      				check[to] = 1;
      				qq.push(to);
      			}
      		}
      		else if(dis[to] == dis[x] + w)
      		{
      			in[to] ++;                  //当有相同的距离是,条数加一
      		}
      	}
      
      
  • 相关阅读:
    tomcat 支持https
    linux环境下jdk 安装以及maven私服搭建
    消息中间间初识
    HDU 5527 Too Rich
    HDU 5534 Partial Tree
    HDU 5543 Pick The Sticks
    HDU 5542 The Battle of Chibi dp+树状数组
    CodeForces 842D Vitya and Strange Lesson
    Codeforces 858D Polycarp's phone book
    HDU 5489 Removed Interval
  • 原文地址:https://www.cnblogs.com/daybreaking/p/12782896.html
Copyright © 2011-2022 走看看