无权最短路径
来源:互联网 发布:python输出语句格式 编辑:程序博客网 时间:2024/05/09 14:25
问题的描述是这样的:有一个有向无权图G,指定一个特定的顶点s作为起点,要求找出从s出发到G中的每一个其它顶点的最短路径。
package com.gloomy.graph;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.List;import java.util.Queue;/** * 无权最短路径 * * @author 过路的守望 * */public class UnweightPathLength { public static void main(String[] args) { Vertex A = new Vertex("A"); Vertex B = new Vertex("B"); Vertex C = new Vertex("C"); Vertex D = new Vertex("D"); Vertex E = new Vertex("E"); Vertex F = new Vertex("F"); Vertex G = new Vertex("G"); A.getAdjacentList().add(B); A.getAdjacentList().add(D); B.getAdjacentList().add(D); B.getAdjacentList().add(E); C.getAdjacentList().add(A); C.getAdjacentList().add(F); D.getAdjacentList().add(C); D.getAdjacentList().add(E); D.getAdjacentList().add(F); D.getAdjacentList().add(G); E.getAdjacentList().add(G); G.getAdjacentList().add(F); UnweightPathLength unweightPathLength = new UnweightPathLength(); unweightPathLength.unweightedPath(C); } /** * 无权最短路径-广度优先遍历 * 时间复杂度O(E+V) * @param s */ public void unweightedPath(Vertex s) { if (s == null) { return; } Queue<Vertex> queue = new ArrayDeque<Vertex>(); /* * 选择s为起点 */ s.setDist(0); queue.offer(s); Vertex curVertex = s; while (!queue.isEmpty()) { curVertex = queue.poll(); for (Vertex vertex : curVertex.getAdjacentList()) { if (vertex.getDist() == Integer.MAX_VALUE) { //更新路径长度 vertex.setDist(curVertex.getDist() + 1); vertex.setPreVertex(curVertex); queue.offer(vertex); } } } while (curVertex != null) { System.out.print(curVertex.getLabel() + "-->"); curVertex = curVertex.getPreVertex(); } }}class Vertex { /* * 路径距离 */ private int dist = Integer.MAX_VALUE; /* * 前继顶点 */ private Vertex preVertex; /* * 邻接表 */ private List<Vertex> adjacentList; /* * 标签 */ private String label; public Vertex(String label) { super(); this.adjacentList = new ArrayList<Vertex>(); this.label = label; } public List<Vertex> getAdjacentList() { return adjacentList; } public int getDist() { return dist; } public String getLabel() { return label; } public Vertex getPreVertex() { return preVertex; } public void setAdjacentList(List<Vertex> adjacentList) { this.adjacentList = adjacentList; } public void setDist(int dist) { this.dist = dist; } public void setLabel(String label) { this.label = label; } public void setPreVertex(Vertex preVertex) { this.preVertex = preVertex; }}
0 0
- 无权最短路径
- 无权最短路径
- 无权最短路径
- 无权最短路径
- 无权最短路径选择
- 无权图-最短路径
- 最短路径算法--无权最短路径
- 无权最短路径-广度优先搜索
- 无权最短路径-广度优先搜索
- 图论之无权最短路径
- 无权最短路径 广度优先搜索
- 无权最短路径算法java实现
- 无权图的最短路径
- 图算法 单源最短路径问题 无权最短路径
- 无权图的单源最短路径最短路径算法
- 单发点无权最短路径C语言
- 无权图的最短路径Java实现
- 打印无权无向图的所有最短路径
- sql连接自读串
- [c++]set整理
- Spark 基础 —— 元组(tuple)
- iOS 多线程
- Linux 关机重启
- 无权最短路径
- Android常见问题总结(一)
- Backbone与Angular的比较
- 1024
- Python函数式编程——学习笔记
- http工作原理小示例
- 如何用ModelsimSE仿真IP核-以PLL为例
- Kindle 原生系统阅读坚排pdf扫描版电子书———基于K2pdfopt重排
- Hdu 5145 NPY and girls