我的图表具有相同的权重。我怎样才能找到最短的路径?
我们可以使用DijKstra's Algorithm
找到最短路径。我认为在这种情况下将使用回溯。但是,由于图表具有相同的权重,还有其他方法可以最佳地找到最短路径吗?
答案 0 :(得分:12)
BFS是获得从一个节点到另一个节点的最短路径的最佳方式...它首先找到距离1到2的所有节点,依此类推
答案 1 :(得分:3)
我认为bfs算法最适合具有相同权重的图来解决最短路径。我认为Bfs也是图中满足三角不等式的最佳算法,如平面图。
答案 2 :(得分:1)
我并不完全理解你想说的是什么,但是找到最短路径作为DijKstra算法的替代算法查找A *(发音为明星)。它是一种类似的算法,只是它适应启发式算法以减少它需要做的检查次数。 DijKstra几乎就像A *,启发式为零,远离真正的启发式。你可以越接近预测启发式算法。
答案 3 :(得分:1)
您还可以使用 Floyd-Warshall 的算法来计算图中每对节点之间的最短路径。如果您的图表很小并且您将进行大量查询,那么这就是要走的路。算法非常简单:
public static void floydwarshall(int[][] graph){
for(int k=0; k<graph.length; k++){
for(int i=0; i<graph.length; i++){
for(int j=0; j<graph.length; j++){
graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]);
}
}
}
}
时间复杂度为O(n ^ 3),其中n是节点数。
否则,请使用 BFS 。