LeetCode基础-图-有向图-最短路径

2023-11-16

最短路径:从图中的一个顶点到另一个顶点的成本最小的路径。
单点最短路径:在加权有向图中,给出一个起点 s,找到是否有一条到顶点 v 的路径,如果有,找出权重最小的那条。

这里写图片描述

最短路径的性质:

  • 路径是有向的。
  • 权重不定表示距离。
  • 并不是所有顶点都是可达的。
  • 负权重会使问题变复杂。
  • 最短路径一般都是简单的(不含零权重边的环)。
  • 最短路径不定是唯一的。
  • 可能存在平行边和自环。平行边中权重最小的才会被选中。也不包含自环(除非自环的权重为零)

最短路径树(SPT):在加权有向图中,有一个顶点 s,以 s 为起点的最短路径树是图的一幅子图,包含 s 和从 s 到达的所有顶点。这棵树的根结点是 s,树的每条路径都是有向图中的一条最短路径。

这里写图片描述

加权有向边的数据结构:

public class DirectedEdge
{
    private final int v; // edge source
    private final int w; // edge target
    private final double weight; // edge weight

    public DirectedEdge(int v, int w, double weight)
    {
        this.v = v;
        this.w = w;
        this.weight = weight;
    }

    public double weight()
    { return weight; }

    public int from()
    { return v; }

    public int to()
    { return w; }

    public String toString()
    { return String.format("%d->%d %.2f", v, w, weight); }
}

加权有向图的数据结构:

public class EdgeWeightedDigraph
{
    private final int V; // number of vertices
    private int E; // number of edges
    private Bag<DirectedEdge>[] adj; // adjacency lists

    public EdgeWeightedDigraph(int V)
    {
        this.V = V;
        this.E = 0;
        adj = (Bag<DirectedEdge>[]) new Bag[V];
        for (int v = 0; v < V; v++)
        {
            adj[v] = new Bag<DirectedEdge>();
        }
    }

    public int V() { return V; }

    public int E() { return E; }

    public void addEdge(DirectedEdge e)
    {
        adj[e.from()].add(e);
        E++;
    }
    public Iterable<Edge> adj(int v)
    { return adj[v]; }

    public Iterable<DirectedEdge> edges()
    {
        Bag<DirectedEdge> bag = new Bag<DirectedEdge>();
        for (int v = 0; v < V; v++)
        {
            for (DirectedEdge e : adj[v])
            {
                bag.add(e);
            }
        }
        return bag;
    }
}

如下图:

这里写图片描述

最短路径的数据结构:

这里写图片描述

  • 最短路径树中的边:使用一个由顶点索引的DirectedEdge对象的父连接数组edgeTo[],edgeTo[v] 的值是树中连接 v 和它的父结点的边(也是 s 到 v 的最短路径上的最后一条边。edgeTo[s] = null;
  • 到达起点的距离:一个由顶点索引的数组 distTo[],其中 distTo[v] 是从 s 到 v 的已知最短路径的长度。distTo[s] = 0;

边的松驰(Relaxation)
定义:要放松(relax)一条边 v->w,意味着检查从
s 到 w 的最短路径是否是先从 s 到 v,然后从 v 到 w,如果是,则更新数据结构的内容。

private void relax(DirectedEdge e)
{
    int v = e.from();
    int w = e.to();
    if (distTo[w] > distTo[v] + e.weight())
    {
        distTo[w] = distTo[v] + e.weight();
        edgeTo[w] = e;
    }
}

边的松驰的两种情况:
一种是边失效,不更新数据。图左。
一种是 v -> w 就是到达 w 的最短路径。图右。

这里写图片描述

顶点的松驰(Relaxation)
顶点的松驰即是放松一个顶点的所有出边。

private void relax(EdgeWeightedDigraph G, int v) 
{
    for (DirectedEdge e : G.adj(v)) 
    {
        int w = e.to();
        if (distTo[w] > distTo[v] + e.weight()) 
        {
            distTo[w] = distTo[v] + e.weight();
            edgeTo[w] = e;
        }
    }
}

如下图:

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode基础-图-有向图-最短路径 的相关文章

  • sudo apt-get update 报错(Ubuntu20.04)

    1 错误 今天运行 sudo apt get update 时报错 appstreamcli 10947 GLib ERROR 09 43 36 719 g variant new parsed 11 13 invalid GVariant
  • 分巧克力 蓝桥杯 99

    题目描述 儿童节那天有 K 位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有 N 块巧克力 其中第 i 块是 Hi Wi 的方格组成的长方形 为了公平起见 小明需要从这N 块巧克力中切出 K 块巧克力分给小朋友们 切出的
  • OpenCV代码提取:dilate函数的实现

    Morphological Operations A set of operations that process images based on shapes Morphological operations apply a struct

随机推荐

  • 反汇编笔记

    1 OD中ctrl f9 运行到返回 就是运行到当前断点所在的函数末尾 retn xxx 处 若xxx 10 那么 10等于10进制的16 就是说这个函数有4个参数 一个参数默认是占4字节 所以就是retn 10 2 调试程序时 在OD内部
  • Windows-如何查看域用户的最终密码更改日期等详细信息

    有些公司的域用户密码是有期限的 比如1个月 3个月之类的 作为管理者或个人 你想查看自己或他人的域用户信息 比如上述的最终密码更改日期时间 就可以用下面这个命令 net user USERID domain 请把上面的红字改为你自己的用户名
  • 2022 ICPC Gran Premio de Mexico Repechaje 题解

    目录 A Average Walk 签到 题意 思路 代码 C Company Layoffs 签到 题意 思路 代码 D Denji1 模拟 二分 思路 代码 K Keypad Repetitions 签到 哈希 题意 思路 代码 L L
  • 【软件测试】备战秋招,数家公司的面经合集整理,总有一家你愿意去的,还不来赶紧学点经验。

    面经 前言 华为测试工程师 笔经 技术一面 技术二面 主管面 结果 大华测试 一面 二面 过了一两个小时就接到了 三面 下午3点接到hr电话 结果 中科创达 笔试 一面 技术面 二面 hr面 结果 恒生测试 安硕测试 恒生 安硕测试 深信服
  • java实现高校教务管理系统(带论文)

    xia基于java实现的高校教务管理系统 带论文 演示地址 教务系统登录 用户名 123456 密码 123456 论文 登录 学生管理 课程管理 学院管理 专业管理 下载地址 基于java实现的高校教务管理系统 带论文 源码世界
  • 以太坊私有链搭建

    https blog csdn net wxb880114 article details 79202378 以太坊私有链搭建
  • 包含中文的properties文件,第一行要空出来

    项目的配置文件中包含了中文 文件的编码格式为UTF 8 当读取properties文件时第一个Key总是失败 后面的Key则正常 Properties类API http docs oracle com javase 7 docs api j
  • setsockopt用法详解

    本文转载于 https www cnblogs com baiduboy p 8127913 html 最近做的一个程序用到了IOCP通信模型 里面用到了setsockopt对套接字进行设置 看源代码的时候最setsockopt函数很不理解
  • windows下用cygwin编译android版ijkplayer

    http blog csdn net ytzys article details 47302123
  • 向服务器请求数据的五种技术

    Ajax 在它最基本的层面 是一种与服务器通讯而不重载当前页面的方法 数据可从服务器获得或发送给服务器 有多种不同的方法构造这种通讯通道 每种方法都有自己的优势和限制 有五种常用技术用于向服务器请求数据 1 XMLHttpRequest X
  • 怎么解决ZBrush保存历史记录太多问题

    经常有用户反映说ZBrush 保存历史记录太多了 导致文件太大了 模型已经是降低级别保存了 在保存历史记录的时候还是很慢很慢 不知道怎么才能减少ZBrush保存的历史步骤的多少 针对这一问题 小编统一解答一下 造成保存历史记录过多的原因 当
  • 使用Python,OpenCV进行形态学操作

    使用Python OpenCV进行形态学操作 1 效果图 2 原理 3 源码 3 1 制作logo源码 https blog csdn net qq 40985985 article details 116025825 3 2 腐蚀膨胀打开
  • uni-app分享微信好友,朋友圈

    1 在mixin文件夹中创建一个 share js文件 export default data return 默认的全局分享内容 share title path 全局分享的路径 imageUrl 全局分享的图片 desc 定义全局分享 1
  • 【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 随着各种新兴技术的发展 无人机在灾后救援
  • 数据挖掘按技能划分,主要分为几类?

    数据挖掘技能从起初的单一门类的知识逐步发展成为一门综合性的多学科知识 并由此产生了很多的数据挖掘方法 这些方法种类多 类型也有很大的差别 为了满足用户的实际需要 现对数据挖掘技能进行如下几种分类 按挖掘的数据库类型分类 利用数据库对数据分类
  • 使用Chrome浏览器自带命令对web页面进行截图,生产高质量图片

    在平时工作中 我们对浏览器的web页面截图有很多方法 无论是Windows还是Mac操作系统 都自带截图工具 但是 如果我们打开的web页面非常的大 我使用操作系统自带的截屏工具就力不从心了 因为我们的显示屏幕不能显示web页面的所有内容
  • react时间戳转换成需要格式

    后端返回前端日期时间 一般给你的都是时间戳 然后前端展示需要转换成需要格式 以下是我开发中常遇到需要转换成的格式 看代码 class DateApi 将输入的毫秒字符串or毫秒数转换成指定的字符串格式 param string msStr
  • 代码圈复杂度cogC、ev、iv、v分别是什么含义

    代码圈复杂度cogC ev iv v分别是什么含义 前言 cogC ev iv v分别是什么含义 优化这四个指标的好处 优化方法 过度优化的坏处 书本推荐 文章推荐 工具推荐 前言 你好 在工作中看项目的代码有时明明代码很长却觉得容易阅读
  • 未能加载文件或程序集“office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。拒绝访问

    未能加载文件或程序集 office Version 15 0 0 0 Culture neutral PublicKeyToken 71e9bce111e9429c 或它的某一个依赖项 拒绝访问 原因 office2013资源 原因 是因为
  • LeetCode基础-图-有向图-最短路径

    最短路径 从图中的一个顶点到另一个顶点的成本最小的路径 单点最短路径 在加权有向图中 给出一个起点 s 找到是否有一条到顶点 v 的路径 如果有 找出权重最小的那条 最短路径的性质 路径是有向的 权重不定表示距离 并不是所有顶点都是可达的