gpt4 book ai didi

java - Dijkstra 算法中的多条路径

转载 作者:行者123 更新时间:2023-11-30 11:01:41 25 4
gpt4 key购买 nike

我在我的一个项目中使用了 Dijksta 的方法。

我的问题是如何显示从 A 到 B 的所有最短路径(如果存在)。我的意思是,例如,如果有不止一条路径具有相同的最小长度。

完整代码如下:

class Vertex implements Comparable<Vertex> {
public final String name;
public Edge[] adjacencies;
public double minDistance = Double.POSITIVE_INFINITY;
public Vertex previous;

public Vertex(String argName) {
name = argName;
}

@Override
public String toString() {
return name;
}

@Override
public int compareTo(Vertex other) {
return Double.compare(minDistance, other.minDistance);
}

}

class Edge {
public final Vertex target;
public final double weight;

public Edge(Vertex argTarget, double argWeight) {
target = argTarget;
weight = argWeight;
}

public void computePaths(Vertex source) {
source.minDistance = 0.;
PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
vertexQueue.add(source);

while (!vertexQueue.isEmpty()) {
Vertex u = vertexQueue.poll();

// Visit each edge exiting u
for (Edge e : u.adjacencies) {
Vertex v = e.target;
double weight = e.weight;
double distanceThroughU = u.minDistance + weight;
if (distanceThroughU < v.minDistance) {
vertexQueue.remove(v);

v.minDistance = distanceThroughU;
v.previous = u;
vertexQueue.add(v);
}
}
}
}

public List<Vertex> getShortestPathTo(Vertex target) {
List<Vertex> path = new ArrayList<Vertex>();
for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
path.add(vertex);

Collections.reverse(path);
return path;
}
}

最佳答案

您需要一组先前的顶点而不是单个顶点。当更新并找到一条等长路径时,将该顶点追加到先前的顶点列表中,清除并在找到更短路径时替换它。

然后处理要显示的内容完全取决于您对它所做的事情。对于您现在拥有的不同路径,您需要递归遍历前任以生成一组路径。

关于java - Dijkstra 算法中的多条路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com