想要的功能是找出所有可以到达终点的路线,并且找出最短的;
现在光是找出到终点显示都有问题,请教大牛帮忙看一看
package page2;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestArlgor1 {
static List<Node> listOpen = new ArrayList();// 待选
List<Node> listClose = new ArrayList();// 已走
static List<Node> allConn = new ArrayList();// 所有
static List<List> yesList = new ArrayList();// 所有
static Map map = new HashMap();
public static void main(String[] args) {
String sStart = "A";//站点A
String sEnd = "Z";//站点Z
//用Dijkstra 实现A-Z的路径
allConn.add(new Node("E", "D", "12"));//站点E、站点D、线路12
allConn.add(new Node("D", "I", "12"));
allConn.add(new Node("I", "J", "12"));
allConn.add(new Node("J", "K", "12"));
allConn.add(new Node("K", "L", "12"));
allConn.add(new Node("L", "M", "12"));
allConn.add(new Node("M", "N", "12"));
allConn.add(new Node("N", "O", "12"));
allConn.add(new Node("O", "Z", "12"));
allConn.add(new Node("A", "B", "11"));
allConn.add(new Node("B", "C", "11"));
allConn.add(new Node("C", "D", "11"));
allConn.add(new Node("D", "E", "11"));
allConn.add(new Node("E", "F", "11"));
allConn.add(new Node("F", "G", "11"));
allConn.add(new Node("G", "H", "11"));
allConn.add(new Node("H", "I", "11"));
allConn.add(new Node("I", "J", "11"));
TestArlgor1 ta = new TestArlgor1();
List listClose1 = new ArrayList();
List list = ta.getShort("A", "Z", listClose1);
for (int i = 0; i < list.size(); i++) {
Node node = (Node) list.get(i);
System.out.println(node.getStart()+"|"+node.getEnd()+"|"+node.getLineNum());
}
}
public static List<Node> getShort(String start, String end, List<Node> listClose) {
for (Node a : allConn) {// 遍历所有集合点
if (start == a.getStart() || start == a.getEnd()) {// 查找出开始结束点是起点的
if (listClose.contains(a)) {
continue;
} else {
System.out.println("listOpenAdd:" + a.getStart() + "|" + a.getEnd()
+ "|" + a.getLineNum());
// listOpen.add(a);// 加入待选点
// 等于终点
if (end == a.getStart() || end == a.getEnd()) {
listClose.add(a);
yesList.add(listClose);
System.out.println("jg");
return listClose;
} else {
// 重新选择原点
if (!start.equals(a.getStart())) {
System.out.println("start = b.getStart():" + a.getStart());
start = a.getStart();
}
if (!start.equals(a.getEnd())) {
System.out.println("start = b.getEnd():" + a.getStart());
start = a.getEnd();
}
System.out.println("start:" + start);
listClose.add(a);
getShort(start, end, listClose);
}
}
}
}
if (allConn.containsAll(listClose)) {
System.out.println("遍历结束");
return listClose;
}
return listClose;
}
}
class Node {
private String start;
private String end;
private String lineNum;
private boolean isRun;
public Node() {
}
public Node(String start, String end, String lineNum) {
this.start = start;
this.end = end;
this.lineNum = lineNum;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}
public String getLineNum() {
return lineNum;
}
public void setLineNum(String lineNum) {
this.lineNum = lineNum;
}
public boolean isRun() {
return isRun;
}
public void setRun(boolean isRun) {
this.isRun = isRun;
}
}
相关推荐
最短路径算法Dijkstra是图论中的一个经典算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出。该算法主要用于寻找带权重的有向或无向图中,从一个特定顶点到其他所有顶点的最短路径。Dijkstra算法的核心思想是...
用C++实现的贪心算法 Dijkstra 单源最短路径,并包含大量的注释,对理解程序很有帮助
dijkstra算法:什么是dijkstra算法,Java和Python如何实现dijkstra算法 dijkstra算法:什么是dijkstra算法,Java和Python如何实现dijkstra算法 dijkstra算法:什么是dijkstra算法,Java和Python如何实现dijkstra算法...
Dijkstra算法是由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出的一种解决这一问题的有效方法。本篇文章将深入探讨Dijkstra算法的基本原理、MATLAB实现以及其在实际应用中的价值。 Dijkstra算法的核心思想是采用...
代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法...
毕业设计:最短路径算法实现,Dijkstra算法,双向Dijkstra算法,CH算法,SILC算法 毕业设计:最短路径算法实现,Dijkstra算法,双向Dijkstra算法,CH算法,SILC算法 毕业设计:最短路径算法实现,Dijkstra算法,双向...
本文将深入探讨两种在路径规划中常用的算法:蚁群算法(Ant Colony Optimization, ACO)和Dijkstra算法,并介绍如何在MATLAB环境中结合这两种算法实现二维路径规划。 蚁群算法是一种启发式全局优化算法,灵感来源于...
总之,Dijkstra算法是图论中的重要算法,广泛应用于路由选择、网络最优化问题等领域。在C语言中实现Dijkstra算法需要掌握图的表示、优先队列的构造和操作,以及动态更新最短路径的方法。通过实践和调试代码,能够更...
Dijkstra算法最简单的实现方法是用一个链表或者数组来存储所有顶点的集合Q,所以搜索Q中最小元素的运算(Extract-Min(Q))只需要线性搜索Q中的所有元素。这样的话算法的运行时间是O(n2)。
并行最短路径算法Dijkstra。 为实现并行最短路径计算,我们必须要解决如下问题: (1)数据获取:利用随机函数生成大约2000个节点及其节点之间的距离。本程序使用邻接矩阵来存储带权有向图的信息。矩阵大小2000*2000...
本研究通过构建数学模型并利用Floyd算法和Dijkstra算法解决了选址问题。不仅考虑了基本的最短路径问题,还进一步考虑了交通费用等因素,使得模型更加贴近实际情况。通过MATLAB编程实现了算法的求解过程,并得到了...
Dijkstra算法是由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出的,它是一种解决单源最短路径问题的有效算法。其基本思想是从源节点开始,逐步扩展最短路径到所有其他节点。在每一步中,算法都会找到当前未访问节点...
"Dijkstra算法寻找最短路径的完整源代码" 本资源提供了Dijkstra算法寻找最短路径的完整源代码,同时附带了Kruskal最小生成树算法。该程序提供了输入输出的完整控制台程序,能够帮助用户快速了解和应用Dijkstra算法...
Dijkstra算法是由荷兰计算机科学家Edsger Dijkstra于1956年提出的,它是一种解决单源最短路径问题的有效方法。在MATLAB中,我们可以利用Dijkstra算法来找到图中所有点之间的最短路径。 Dijkstra算法的基本思想是...
虽然Dijkstra算法在处理大规模网络时效率较低,但它能够保证找到精确的最短路径,对于简单的二维路径规划问题非常适用。 结合蚁群算法和Dijkstra算法的优势,我们可以构建一个更高效的路径规划系统。在初始阶段,...
dijkstra算法C++实现的程序代码
Dijkstra最短路径算法 Dijkstra最短路径算法
dijkstra算法,MATLAB算法Dijkstra算法找最短路径代码MATLAB算法Dijkstra算法找最短路径代码感兴趣的同学可以下载学习