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] ++;                  //当有相同的距离是,条数加一
      		}
      	}
      
      
  • 相关阅读:
    1-6.webpack对字体图标和图片的处理
    1-5.Webpack对Html模板处理
    1-4.Webpack对样式的处理
    1-3.Webpack对脚本的处理
    1-2.Webpack初始化
    1-1.mmall电商项目搭建
    Java 随心笔记11
    Java 随心笔记10
    Java 随心笔记9
    Java 随心笔记8
  • 原文地址:https://www.cnblogs.com/daybreaking/p/12782896.html
Copyright © 2011-2022 走看看