Dijkstra的算法找到所有可能的最短路径

编程入门 行业动态 更新时间:2024-10-25 04:19:57
本文介绍了Dijkstra的算法找到所有可能的最短路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我正在研究Dijkstra的算法,我真的需要找到所有可能的最短路径,而不仅仅是一条。我使用的是邻接矩阵,我应用了Dijkstra的算法,我可以找到最短路径。但我需要以最低的成本找到所有的路径,我的意思是所有可能的解决方案,如果它们存在的话。

这就是我的算法的工作方式,对于单个解决方案:

public void dijkstra(int graph [] []) { int d [] = new int [graph.length]; int dC [] = new int [graph.length]; int p [] = new int [graph.length]; for(int i = 0; i

解决方案

如果你看看Dijkstra算法在这里伪代码形式: 维基百科Dijkstra的算法伪代码

您会注意到这条线被称为放松。现在它只包含一个案例,用于找到的路径小于当前最短路径,但如果它们 ,则不会执行任何操作。您应该保留列表中所有同样短的路径。

I'm working on Dijkstra's algorithm, and I really need to find all the possible shortest paths, not just one. I'm using an adjacency matrix and I applied Dijkstra's algorithm, and I can find the shortest path. But I need to find all the paths with that minimum cost, I mean all the possible solutions, if they exist.

This is how my algorithm works, for a single solution:

public void dijkstra( int graph[][] ) { int d[] = new int[ graph.length ]; int dC[] = new int[ graph.length ]; int p[] = new int[ graph.length ]; for( int i = 0; i < graph.length; i++ ){ d[ i ] = 100; dC[ i ] = 100; p[ i ] = -1; } d[ 0 ] = 0; dC[ 0 ] = 0; int i = 0, min = 200, pos = 0; //You can change the min to 1000 to make it the largest number while( i < graph.length ){ //extract minimum for( int j = 0; j < dC.length; j++ ){ if( min > d[ j ] && dC[ j ] != -1 ){ min = d[ j ]; pos = j; } } dC[ pos ] = -1; //relax for( int j = 0; j < graph.length; j++ ){ if( d[ j ] > graph[ pos ][ j ] + d[ pos ] ){ d[ j ] = graph[ pos ][ j ] + d[ pos ]; p[ j ] = pos; } } i++; min = 200; } for( int j = 0; j < p.length; j++ ){ System.out.print( p[ j ] + " " ); } System.out.print( "\n" ); for( int j = 0; j < d.length; j++ ){ System.out.print( d[ j ] + " " ); } System.out.print( "\n" ); }

解决方案

If you look at Dijkstra's algorithm in pseudocode form here: Wikipedia Dijkstra's Algorithm Pseudocode

You will notice the line referred to as a Relax. Right now it only contains a case for if the path found is less than the current shortest path, but there isn't anything done if they are equal. You should probably keep all the equally short paths in a List.

更多推荐

Dijkstra的算法找到所有可能的最短路径

本文发布于:2023-11-29 23:26:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1647950.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最短   算法   路径   Dijkstra

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!