2022-03-11:int n, int[][] roads, int x, int y,
n表示城市数量,城市编号0~n-1,
roads[i][j] == distance,表示城市i到城市j距离为distance(无向图),
求城市x到城市y的最短距离。

答案2022-03-11:

有向图,没有负数环。小根堆。

代码用golang编写。代码如下:

package main

import (
"fmt"
"math"
"sort"
) func main() {
roads := [][]int{{1, 2, 3}, {1, 3, 5}, {2, 3, 1}}
n := 3
x := 1
y := 3
ret := minDistance2(n, roads, x, y)
fmt.Println(ret)
} func minDistance2(n int, roads [][]int, x, y int) int {
// 第一步生成邻接矩阵
map0 := make([][]int, n+1)
for i := 0; i < n+1; i++ {
map0[i] = make([]int, n+1)
}
for i := 0; i <= n; i++ {
for j := 0; j <= n; j++ {
map0[i][j] = math.MaxInt64
}
}
// 建立路!
for _, road := range roads {
map0[road[0]][road[1]] = getMin(map0[road[0]][road[1]], road[2])
map0[road[1]][road[0]] = getMin(map0[road[1]][road[0]], road[2])
}
// computed[i] = true,表示从源出发点到i这个城市,已经计算出最短距离了
// computed[i] = false,表示从源出发点到i这个城市,还没有计算出最短距离
computed := make([]bool, n+1)
// 距离小根堆
//PriorityQueue<Node> heap = new PriorityQueue<>((a, b) -> (a.pathSum - b.pathSum));
heap0 := make([]*Node, 0)
heap0 = append(heap0, NewNode(x, 0))
for len(heap0) > 0 {
// x -> ... -> 当前的城市, 有距离
sort.Slice(heap0, func(i, j int) bool {
a := heap0[i]
b := heap0[j]
return a.pathSum < b.pathSum
})
cur := heap0[0]
heap0 = heap0[1:]
if computed[cur.city] {
continue
}
// 没算过
// 开始算!
if cur.city == y {
return cur.pathSum
}
computed[cur.city] = true
for next := 1; next <= n; next++ {
if next != cur.city && map0[cur.city][next] != math.MaxInt64 && !computed[next] {
heap0 = append(heap0, NewNode(next, cur.pathSum+map0[cur.city][next]))
}
}
}
return math.MaxInt64
} func getMin(a, b int) int {
if a < b {
return a
} else {
return b
}
} // 当前来到的Node,注意这不是城市的意思,这是就是一个普通的封装类
// Node封装了,当前来到的城市是什么,以及,从源出发点到这个城市的路径和是多少?
type Node struct {
// 当前来到的城市编号
city int
// 从源出发点到这个城市的路径和
pathSum int
} func NewNode(c, p int) *Node {
ans := &Node{}
ans.city = c
ans.pathSum = p
return ans }

执行结果如下:


左神java代码

2022-03-11:int n, int[][] roads, int x, int y, n表示城市数量,城市编号0~n-1, roads[i][j] == distance,表示城市i到城市j距的更多相关文章

  1. CAST function should support INT synonym for SIGNED. i.e. CAST(y AS INT)

      Login / Register Developer Zone Bugs Home Report a bug Statistics Advanced search Saved searches T ...

  2. "int?" 是什么类型?和"int"有何区别

    int?:表示可空类型,就是一种特殊的值类型,它的值可以为null用于给变量设初值得时候,给变量(int类型)赋值为null,而不是0int??:用于判断并赋值,先判断当前变量是否为null,如果是就 ...

  3. 假设程序需要一个int类型的变量来保持你所有的音乐CD的数量

    假设程序需要一个int类型的变量来保持你所有的音乐CD的数量.初始值为0为该变量编写一条声明语句 int numCDs = 0;

  4. 把C程序的int main(void)改成static int main(void)会怎样呢?

    如题,把C程序中的主函数int main(void)改成static int main(void)会怎么样呢? 比如把 #include <stdio.h> int main(void) ...

  5. 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

    因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...

  6. C++中int转string与string转int

    #include "stdafx.h" #include "string" #include "iostream" #include &qu ...

  7. 转:int整数除以int整数一定得到的是int整数(易忽视)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u014053368/article/de ...

  8. C#程序编写高质量代码改善的157个建议【4-9】[TryParse比Parse、使用int?来确保值类型也可以为null、readonly和const、0值设为枚举的默认值、避免给枚举类型的元素提供显式的值、习惯重载运算符]

    建议4.TryParse比Parse好 如果注意观察,除string之外的所有的基元类型.会发现它们都有两个将字符串转换为自身类型的方法:Parse和TryParse.以类型double为例. 两者最 ...

  9. Python 3 的 int 类型详解(为什么 int 不存在溢出问题?)

    在以前的Python2中,整型分为int和long,也就是整型和长整型, 长整型不存在溢出问题, 即可以存放任意大小的数值,理论支持无限大数字. 因此在Python3 中,统一使用长整型,用int表示 ...

  10. JZOJ 2022.02.11【提高A组】模拟

    \(\text{Solution}\) 首先把 \(T2\) 给切了,\(T1\) 找半天规律找不到 然后打了个表算是暴力了 \(T3\) 也暴... 太暴了... \(T4\) 直接啥也不会 \(\ ...

随机推荐

  1. Ubuntu 14.04环境编译android源码android-5.0.2_r1.7z

    环境: Win7:8G内存 vmware:vm给ubuntu分配4G内存80G空间 参考视频: https://www.bilibili.com/video/BV15t411R78o ubuntu14 ...

  2. gitlab-ce安装

    # vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors. ...

  3. Spring源码分析之注册BeanDefinition

    测试代码 public class ContextApplication { public static void main(String[] args) { ClassPathXmlApplicat ...

  4. 痞子衡嵌入式:RISC-V指令集架构MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是RISC-V指令集架构微控制器相关知识. RISC-V指令集最早要追溯到2010年,是加州大学伯克利分校的一个研究团队的项目,目标是设 ...

  5. 这篇文章汇聚33个BUG!来挑战一下,看看你能找出来几个?

    你好呀,我是歪歪. 前几天看到"Qunar技术沙龙"公众号推送了一篇关于他们举办了一场"Code Review大赛"的文章. 看到 Code Review 我很 ...

  6. Java学习小总结它又又又又来啦!

    又到了输出总结的时候啦,话不多说,直接开始输出! 一.final final修饰符的主要作用就是强调它所修饰的板块的"最后"性: 若是修饰成员方法:那么成员方法不可以再被重写: 若 ...

  7. 【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(Paxos篇)

    概念简介 Paxos是一种基于消息传递具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一. 发展历史 Paxos算法的发展历史追溯到古希腊,当时有一个名为"Pax ...

  8. 声网 X Yalla:面对面不如线上见,中东年轻人最偏爱的语聊房是怎样“炼”成的?

    "实时互动的本质是服务,而非功能."这是声网一直以来坚信的理念. 功能上线之后,服务才真正开始.实时互动的每一秒,甚至每一毫秒的体验都需要得到稳定.可靠的保证.而广大用户之所以能够 ...

  9. 最新版本 Stable Diffusion 开源AI绘画工具之部署篇

    目录 AI绘画 本地环境要求 下载 Stable Diffusion 运行启动 AI绘画 关于 AI 绘画最近有多火,既然你有缘能看到这篇文章,那么相信也不需要我过多赘述了吧? 随着 AI 绘画技术的 ...

  10. Android APP开机启动,安卓APP开发自启动,安卓启动后APP自动启动 Android让程序开机自动运行APP 全开源下载

    让APP在安卓系统启动自动运行可以带来以下几个好处:用户方便:当用户打开设备时,自动启动所需的APP可以让用户更方便地使用设备,不必手动打开APP.提高用户黏性:自动启动APP可以让用户更快地开始使用 ...