【发布时间】:2011-02-18 15:31:18
【问题描述】:
我正在研究 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 < 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" );
}
【问题讨论】:
-
如果您提供一个代码示例来说明您到目前为止已经走了多远,会更容易为您提供帮助。
-
您确定必须使用 Dijkstra 算法吗?想到了另一种算法,它找到图中所有最短路径的长度,并且一些修改可以返回这些路径
-
@Maciej H 您可能指的是 Floyd-Warshall。这会找到所有点对之间的最短路径,但不会找到两点之间的 all 最短路径。略有区别,但问题有点不同。
-
@Anderson Imes 好的,谢谢。我理解其中的区别,但从帖子中并不清楚问题是什么。
-
嗯...我不清楚,我的错 :)