2021-04-21:手写代码:Dijkstra算法。
2021-04-21:手写代码:Dijkstra算法。
福大大 答案2021-04-21:
Dijkstra算法是一种基于贪心策略的算法。每次新扩展一个路程最短的点,更新与其相邻的点的路程。时间紧,未完成。
代码用golang编写。代码如下:
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println("")
}
func dijkstra1(from *Node) map[*Node]int {
distanceMap := make(map[*Node]int)
distanceMap[from] = 0
// 打过对号的点
selectedNodes := make(map[*Node]struct{})
minNode := getMinDistanceAndUnselectedNode(distanceMap, selectedNodes)
for minNode != nil {
// 原始点 -> minNode(跳转点) 最小距离distance
distance := distanceMap[minNode]
for _,edge := range minNode.edges {
toNode := edge.to
if _,ok:=distanceMap[toNode];!ok {
distanceMap[toNode]= distance+edge.weight
} else { // toNode
distanceMap[edge.to]=getMin(distanceMap[toNode], distance+edge.weight))
}
}
selectedNodes[minNode]= struct{}{}
minNode = getMinDistanceAndUnselectedNode(distanceMap, selectedNodes)
}
return distanceMap
}
func getMin(a int,b int)int{
if a<b{
return a
}else{
return b
}
}
func getMinDistanceAndUnselectedNode(distanceMap map[*Node]int, touchedNodes map[*Node]struct{}) *Node {
var minNode *Node
minDistance := math.MaxInt32
for k, v := range distanceMap {
node := k
distance := v
_, ok := touchedNodes[node]
if !ok && distance < minDistance {
minNode = node
minDistance = distance
}
}
return minNode
}
type Edge struct {
weight int
from *Node
to *Node
}
// 点结构的描述
type Node struct {
value int
in int
out int
nexts []*Node
edges []*Edge
}
type Graph struct {
nodes map[int]*Node
edges map[*Edge]struct{}
}
2021-04-21:手写代码:Dijkstra算法。的更多相关文章
- .netER的未来路,关于基础是否重要和应该自己手写代码吗?
http://www.cnblogs.com/onepiece_wang/p/5558341.html#!comments 引用"基础知识的学习,一开始可能是背书,但是在后续若干年的工作过程 ...
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- 手写代码自动实现自动布局,即Auto Layout的使用
手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...
- 如果选择构建ui界面方式,手写代码,xib和StoryBoard间的博弈
代码手写UI这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用. 大型多人合作项目使用代码构建UI,主要是看中纯代码在版本管理时的优势,检查追踪改动以及进行代码合并相对容易一些. 另外,代 ...
- 手写代码UI,xib和StoryBoard间的的优劣比较
在UI制作方面,逐渐分化三种主要流派:使用代码手写UI:使用单个xib文件组织viewController或者view:使用StoryBoard来通过单个或很少的几个文件构建UI.三种方式各有优劣,也 ...
- UI到底应该用xib/storyboard完成,还是用手写代码来完成?
UI到底应该用xib/storyboard完成,还是用手写代码来完成? 文章来源:http://blog.csdn.net/libaineu2004/article/details/45488665 ...
- 2019前端面试系列——JS高频手写代码题
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...
- Appium初始化设置:手写代码连接手机、appium-desktop连接手机
一.包名获取的三种方式 1)找开发要2)mac使用命令:adb logcat | grep START win使用命令:adb logcat | findstr START 或者可以尝试使用第3条命令 ...
- gcd手写代码及STL中的使用方法
一.手写代码 inline int gcd(int x,int y){ if(y==0) return x; else return(gcd(y,x%y)); } 二.STL中的使用方法 注:在STL ...
- SpringCloud-Ribbon负载均衡机制、手写轮询算法
Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...
随机推荐
- PC端,知乎在不想登录的情况下一打开就弹出登录框的无痛解决办法
基于chrome浏览器 第一步: chrome://settings/content/javascript 第二步:添加禁用项 [*.]zhihu.com
- 使用php将字典格式的字符串转为array
例: 原字符串为 $a = '{"errcode":0,"errmsg":"ok","msgid":1472671765 ...
- vue element表格合计问题
vue element计算表格合计问题 问题:当表格的el-table-column标签下的属性prop属性值为'对象.属性'时,将不能自动合计.例如: <el-table border v-l ...
- 实验十 团队作业7:团队项目用户验收&Beta冲刺
项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验十 团队名称 零基础619 团队成员分工描述 任务1:亚楠,桂婷任务2:团队合作任务3:团队合作任务4:荣娟,鑫 团队的课程学习目 ...
- win10,在桌面点击右键:显示设置和个性化,出现“该文件没有与之关联的应用来执行该操作,请安装应用,若已经安装应用,请在默认应用设置页面中创建关联”
参考:https://zhidao.baidu.com/question/2076100681854702028.html 1. WIN + R 打开运行,并输入 regedit,点击确定,进入注册表 ...
- Gin使用及源码简析
1. Gin简介 前面通过两篇文章分享了Golang HTTP编程的路由分发.请求/响应处理. Golang HTTP编程及源码解析-路由分发 Golang HTTP编程及源码解析-请求/响应处理 可 ...
- 【LeetCode回溯算法#10】图解N皇后问题(即回溯算法在二维数组中的应用)
N皇后 力扣题目链接(opens new window) n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回所有不同的 n 皇 ...
- Python学习笔记--循环的知识以及应用
while循环 代码: 结果: 案例:求1-100的和 实现: 案例:while循环猜数字 实现: while循环的嵌套使用 案例:打印九九乘法表 (注意:要是想要输出不换行,代码可以这样写:prin ...
- 声网发布教育新品:灵动课堂全球覆盖学生超400万,互动白板首创H5课件
3月31日,全球实时互动云服务商声网Agora在北京举行教育产品发布会,正式发布教育行业首款aPaaS产品"灵动课堂",和首个支持H5课件的白板PaaS产品"互动白板&q ...
- University of Toronto Scarborough Campus December 7, 2017 CSC C73 Final Examination Instructor: Vassos Hadzilacos
https://app.yinxiang.com/shard/s59/res/8a11b895-19b5-4ca1-aefe-10b5985b8af9/CSCC73 Final 17.pdf 自己尝试 ...