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. 配置环境变量在history中显示时间

    1.1.临时显示(断电丢失) 配置变量HISTTIMEFORMAT,加入"%F %T ". 示例: [root@CentOS8 ~]# HISTTIMEFORMAT='%F %T ...

  2. SimpleITK和nibable读取nii文件

    import SimpleITK as sitk path = 'nii全路径' nii_obj = sitk.GetArrayFromImage(sitk.ReadImage(path)) #sha ...

  3. Java8 Optional使用方式

    参考博客:https://blog.csdn.net/zjhred/article/details/84976734

  4. Redis6.0.9集群搭建

    前提条件: Redis版本:6.0.9(因为5.0之前创建用的是redis-trib,还需要ruby,ruby-gem) 安装环境: Centos7 1. 准备配置文件 一个是通用文件:redis-c ...

  5. 3.错误代码C4996

    3.错误代码C4996 错误 C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s inst ...

  6. 关于VScode vue3卡顿

    在使用vscode+volar开发vue3项目时,出现代码提示缓慢的问题.通过开启Volar Takeover *模式解决. 以下摘自Vue3官网 https://cn.vuejs.org/guide ...

  7. 3分钟带你了解Hadoop是什么

    Hadoop是一种开源的分布式计算框架,它在Google的MapReduce论文发表后大受欢迎,并被广泛应用.Hadoop框架包括一个分布式文件系统(HDFS),它允许用户以分布式方式存储和管理大量数 ...

  8. 【接口测试】Postman(二)-Postman Echo

    Postman Echo ​ Postman Echo为用户提供API调用的示例服务.简而言之,就是官方提供的一个API帮助文档.初学者可以通过它很快的掌握Postman工具.我们下面将一一介绍他们. ...

  9. 设置Mysql sort_buffer_size参数

    按照官网的解释:Each session that must perform a sort allocates a buffer of this size. sort_buffer_size is n ...

  10. 安装部署keepalived的HA环境

    每一台配置下keepalived #master01 配置: cat >/etc/keepalived/keepalived.conf<<"EOF" ! Conf ...