狄克斯特拉算法
来源:互联网 发布:怎么去掉知乎标题 编辑:程序博客网 时间:2024/06/05 02:55
package cn.zhaoyuening.algorithms.dijkstra;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;class Vertex{ private String name; private Map<Vertex, Integer> adjMap = new HashMap<>(); public Vertex(String name){ this.name = name; } public String getName() { return name; } public Vertex setName(String name) { this.name = name; return this; } public Integer getValByVertex(Vertex vertex) { return adjMap.get(vertex); } public Vertex addAdj(Vertex v, Integer val) { adjMap.put(v, val); return this; } public Set<Vertex> getAdjSet() { return adjMap.keySet(); } @Override public String toString() { return this.name; }}public class Dijkstra { private Map<Vertex, Integer> valMap; private Set<Vertex> handledVertex; public Integer miniVal(Vertex startVertex, Vertex endVertex) { valMap = new HashMap<Vertex, Integer>(); valMap.put(startVertex, 0); handledVertex = new HashSet<>(); Vertex tmpVertex = startVertex; Set<Vertex> adjSet = null; while (tmpVertex != null) { handledVertex.add(tmpVertex); adjSet = tmpVertex.getAdjSet(); for (Vertex v : adjSet) { updateValMap(v, valMap.get(tmpVertex)+tmpVertex.getValByVertex(v));// 找下个最小距离点 } tmpVertex = findMiniValVertex(); } return valMap.get(endVertex); } public Vertex findMiniValVertex() { Vertex miniVertex = null; Integer miniVal = Integer.MAX_VALUE; int tmpVal = 0; for (Vertex v : valMap.keySet()) { if (handledVertex.contains(v)) { continue; } tmpVal = valMap.get(v); if (miniVal > tmpVal) { miniVal = tmpVal; miniVertex = v; } } return miniVertex; } public boolean updateValMap(Vertex vertex,Integer val) { if (!valMap.containsKey(vertex)||val < valMap.get(vertex)) { valMap.put(vertex, val); return true; } return false; } public static void main(String[] args) { Vertex s = new Vertex("S"); Vertex a = new Vertex("A"); Vertex b = new Vertex("B"); Vertex e = new Vertex("E"); s.addAdj(a, 6); s.addAdj(b, 2); b.addAdj(a, 3); a.addAdj(e, 1); Dijkstra dijkstra = new Dijkstra(); Integer val = dijkstra.miniVal(s, e); System.out.println(val); }}
阅读全文
1 0
- 狄克斯特拉算法
- 狄克斯特拉算法
- 算法学习笔记--狄克斯特拉算法
- 《算法图解》书摘-狄克斯特拉算法贪婪算法等
- 【图算法】狄克斯特拉算法Java实现
- 广度优先算法之狄克斯特拉算法
- 狄克斯特拉算法(入门)
- (原创)狄克斯特拉算法
- 第七章 狄克斯特拉算法
- 狄克斯特拉算法python
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- DES加密工具类,用于网络参数加密
- 1010. Radix (25)
- TensorFlow学习--卷积神经网络训练CIFAR-10数据集
- 1052第四届程序设计大赛 最优服务
- 乐观锁与悲观锁
- 狄克斯特拉算法
- 快速搭建docker spark+hadoop计算环境
- MySQL事务介绍及原理
- hibernater 复习,总结
- jqGrid框架中如何设置动态展示自定义的列
- shiro 之 Shiro 标签
- 每隔10度输出0度到300度之间的华氏温度到摄氏温度的对照表
- 1012. 数字分类 (20)
- linux系统查看和修改PATH环境变量的方法