`
sunlujing
  • 浏览: 179873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最短路径算法记录多条路径

    博客分类:
  • j2se
阅读更多

在使用Dijkstra算法计算最段路径的时候,如果只有多条最段路径默认只能输出一条,其实只要修改一下代码就可以得到多条最段路径。

 

 

public ArrayList<ArrayList<Node>>  shortPathAstar(Node src,Node des){

open.clear();

closed.clear();

open.add(src);

while(open.size() > 0){

float lowest = Float.MAX_VALUE;

int c = -1;

//找到Open列表中当前路径最小值节点

for(int i = 0; i < open.size(); i++){

Node temp = (Node) open.get(i);

if(temp.getF() < lowest){

lowest = temp.getF();

c = i;

}

}

   

Node current = (Node) open.remove(c);

closed.add(current);

if(current.equals(des)){

break;

}

for(int i = 0; i < current.getLinks().size(); i++){

Connector a = (Connector) current.getLinks().get(i);

Node adjacent = a.getDes();

if(!arrayListContains(closed, adjacent)){

if(!arrayListContains(open, adjacent)){//不在open表中

open.add(adjacent);

adjacent.setParenet(current);

adjacent.setF(current.getF()+a.getDistance());

}else{//在open表中

if(adjacent.getF() > current.getF()+a.getDistance()){

adjacent.setParenet(current);

adjacent.setF(current.getF()+a.getDistance());

}else if(adjacent.getF() == current.getF()+a.getDistance()){

//如果相等于把其放入到open 表中,以便能搜索多条最短路径

  //主要的策略是复制一个节点,并把这个节点放入到候选的open表中作为

//又一个候选节点

Node dup = new Node(adjacent.getName());

dup.setParenet(current);

dup.setF(current.getF()+a.getDistance());

dup.setLinks(adjacent.getLinks());

open.add(dup);

}

}//end if

}//end if

}//end For

}//end while

ArrayList<ArrayList<Node>> path = new ArrayList<ArrayList<Node>>();

Node pathNode = des;

ArrayList<Node> result = new ArrayList<Node>();

while(pathNode != null){

result.add(pathNode);

pathNode = pathNode.getParenet();

}

Collections.reverse(result);

path.add(result);

//找到多条最短的路径

for(Node node:open){

ArrayList<Node> temp = new ArrayList<Node>();

if(node.equals(des)){

while(node != null){

temp.add(node);

node = node.getParenet();

}

Collections.reverse(temp);

path.add(temp);

}

}

return path;

}

 

 

0
0
分享到:
评论

相关推荐

    最短路径算法及应用.pdf

    ### 最短路径算法及其应用 #### 一、单源最短路径问题 在日常生活中,当我们需要找到两个地点之间的最短路径时,...随着技术的发展,最短路径算法的研究仍在不断深入,未来可能会出现更多高效、实用的算法和技术。

    单源点最短路径的贪心算法

    单源点最短路径问题的贪心算法有很多实际应用,例如,在交通网络中,找到从某个城市到所有其他城市的最短路径;在电信网络中,找到从某个交换机到所有其他交换机的最短路径等。 贪心算法是一种简单而有效的解决单源...

    数据结构-最短路径算法实现

    本话题将深入探讨数据结构中的最短路径算法及其C++实现。最短路径问题广泛应用于网络路由、物流配送、社交网络分析等多个领域,解决的是如何在图中找到从一个顶点到另一个顶点的最短路径。 一、Dijkstra算法 ...

    蚁群算法最短路径matlab程序.zip_MATLAB最短路径_matlab 路径_最短路径_最短路径算法_蚁群路径

    蚁群算法是一种模拟生物群体行为的优化算法,它在寻找多条最短路径问题上表现优秀,尤其在解决复杂网络中的路由问题上有着广泛的应用。MATLAB作为一种强大的数学建模和计算工具,常被用于实现各种算法,包括蚁群算法...

    前k条最短路径算法实例

    Martin的算法基于Dijkstra的最短路径算法,但扩展了其功能以找到多条路径。Dijkstra算法是一种贪心策略,每次迭代都找到当前未访问节点中最短的路径,直到到达目标节点。然而,仅使用Dijkstra算法无法保证找到前k条...

    MapReduce实现单元最短路径算法.doc

    《MapReduce实现单元最短路径算法》 MapReduce是一种分布式计算模型,常用于处理大数据集。在本文档中,我们探讨了如何利用MapReduce来解决图论中的单元最短路径问题。单元最短路径问题旨在寻找图中从一个源节点到...

     第K条最短路径算法.doc

    总之,第K条最短路径算法通过二重扫除策略,结合推广的运算,有效地解决了在网络中寻找多条次优路径的问题。这种方法虽然比单源最短路径算法复杂,但对于需要多个备选方案的场景,它是必不可少的工具。

    k-最短路径

    K-最短路径算法的核心是通过迭代的方式,每次增加一条路径直到找到k条满足条件的路径。在每一轮迭代中,算法会从当前已知的最短路径集合中选择一条路径,并尝试通过扩展这条路径来找到更短的路径。这个过程通常涉及...

    DIJKSTRA最短路径算法

    ### Dijkstra最短路径算法详解及其高效实现 #### 一、引言 随着信息技术与地理信息系统的迅速发展,网络分析已成为GIS(Geographic Information System,地理信息系统)领域中不可或缺的一部分。其中,最短路径...

    图的最短路径实验报告

    2. 最短路径算法:实验的目标是实现一种算法,找到图中某个顶点到其他所有顶点的最短路径。常见的求解最短路径的算法有Dijkstra算法、Floyd-Warshall算法等。在实验中,可能采用了其中的一种或自定义的算法来解决这...

    基于洪泛查询的最短路径算法在智能交通系统中的应用.pdf

    4. 在此过程中,每个节点记录多条次优路径,以便在需要时作为备用路径。 在智能交通系统中,基于洪泛查询的最短路径算法能够快速响应道路状况的变化,实时提供最优路径建议,有助于减少交通拥堵,提高道路通行能力...

    最短路径算法.docx

    【最短路径算法】 最短路径算法是一种在图论中寻找两点之间最短路径的数学方法,广泛应用于网络路由、交通规划、物流优化等领域。Dijkstra算法是其中一种经典算法,由荷兰计算机科学家艾兹格·迪科斯彻于1956年提出...

    多段图最短路径(算法课实验)

    为了验证和展示算法的效果,实验提供的压缩包文件“多段图最短路径”可能包含了一些示例图的数据结构、代码实现或者测试用例,这些可以帮助我们更好地理解和实现多段图最短路径算法。 总结来说,多段图最短路径问题...

    最短路径弗洛伊德算法演示

    即如果dist[i][k] + dist[k][j] [i][j],则更新dist[i][j]为dist[i][k] + dist[k][j],其中dist矩阵记录了当前状态下所有顶点对的最短路径。 3. 重复步骤2,直到遍历过所有节点k。在遍历完所有中间节点后,dist矩阵...

    关于改进GIS领域的最短路径Dijkstra算法研究

    Dijkstra)提出的Dijkstra算法是一种经典的单源最短路径算法,用于寻找图中两点之间的最短路径。尽管该算法已经被广泛应用,但在GIS领域,特别是当需要考虑多条最短路径时,传统的Dijkstra算法存在一定的局限性。...

    Dijkstra 最短路径算法的一种高效率实现.doc

    ### Dijkstra最短路径算法的一种高效率实现 #### 摘要 本文旨在探讨Dijkstra最短路径算法的一种高效实现方式。随着地理信息系统(GIS)技术的快速发展与广泛应用,网络分析成为了GIS研究的一个核心领域。其中,计算...

    基于java的最短路径算法实现 k-shortest-paths.zip

    在这个"基于java的最短路径算法实现 k-shortest-paths.zip"压缩包中,很显然包含了一个用Java实现的求解最短路径问题的程序,尤其是K-Shortest Paths(K条最短路径)算法。 K-Shortest Paths算法是一种扩展了...

    最短路径算法

    最短路径算法是图论中的一个经典问题,广泛应用于网络路由、交通规划、社交网络分析等领域。本压缩包提供了一种基于Brute Force(暴力枚举)方法的Java实现,适用于简单无权或有权图的最短路径计算。下面将详细介绍...

    最短路径的Dijsktra算法及Floyd算法

    算法基于贪心策略,每次扩展当前已知最短路径中最短的一条边,逐步扩大已找到最短路径的范围。 1. **算法步骤**: - 初始化:设置源点距离为0,其余顶点距离为无穷大,创建一个空集合记录已找到最短路径的顶点。 ...

    算法相关-求十字网格的最短路径

    最短路径问题有很多种解决方法,常见的有Dijkstra算法、Floyd-Warshall算法、A*搜索算法等。在这个特定的情境下,由于十字网格没有权重,Dijkstra算法是一个理想的解决方案。Dijkstra算法是一种贪婪算法,它通过不断...

Global site tag (gtag.js) - Google Analytics