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. STM32定时器(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,配置使用

    2.1    时钟来源 计数器时钟可以由下列时钟源提供: ·内部时钟(CK_INT) ·外部时钟模式1:外部输入脚(TIx) ·外部时钟模式2:外部触发输入(ETR) ·内部触发输入(ITRx):使用 ...

  2. RecyclerView显示列表

    本次要讲的内容是利用RecyclerView显示Users列表的信息,如下图所示. 首先我们来创建模型User.java package com.example.mytest.User; import ...

  3. mybaits-plus 部分注解说明

    参考: https://blog.csdn.net/qq_45684867/article/details/123951309

  4. 网络安全(中职组)-B模块:Web安全渗透测试

    Web安全渗透测试任务环境说明: 服务器场景:PYsystem003(关闭链接)服务器操作系统:未知用户名:未知 密码:未知 1.    通过浏览器访问http://靶机服务器IP/1,对该页面进行渗 ...

  5. VSCode使用小技巧

    VSCode写C/C++项目 我们需要先下载minGW,并需要在VS Code里面下载相应的插件, 如下: 然后,将vscode保存c++项目的文件夹用vscode打开,就会出现这样的形式: 一个标准 ...

  6. 实践Pytorch中的模型剪枝方法

    摘要:所谓模型剪枝,其实是一种从神经网络中移除"不必要"权重或偏差的模型压缩技术. 本文分享自华为云社区<模型压缩-pytorch 中的模型剪枝方法实践>,作者:嵌入式 ...

  7. java循环结构中局部变量和成员变量

    前言 在前两篇文章中,壹哥给大家讲解了Java里的条件分支,包括if和switch两种情况.我们知道,除了条件分支结构,还有循环结构,所以接下来的一个学习重点就是Java里的循环.但在学习循环之前,我 ...

  8. 泰拉瑞亚EasyBuildMod便捷建造模组开发详细过程

    pre { overflow-y: auto; max-height: 400px } img { max-width: 500px; max-height: 300px } github地址: ht ...

  9. selenium 您的连接不是私密连接的解决办法

            一.问题描述 用selenium启动浏览器时,chrome提示您的连接不是私密连接. 二.解决方案 方案1: 在当前页面用键盘输入  thisisunsafe  ,不是在地址栏输入,就 ...

  10. python之修改本地Ip地址

    安装模块pip install wmi # -*- coding: cp936 -*- # # FileName: ModifyIP.py # Date : 2008-01-15 # import w ...