使用JGraphT实现Dijkstra算法查找最短路径或最小成本路径的示例代码如下:
import org.jgrapht.Graph;
import org.jgrapht.GraphPath;
import org.jgrapht.alg.interfaces.ShortestPathAlgorithm;
import org.jgrapht.alg.interfaces.ShortestPathAlgorithm.SingleSourcePaths;
import org.jgrapht.alg.shortestpath.DijkstraShortestPath;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.SimpleDirectedWeightedGraph;
public class DijkstraShortestPathExample {
public static void main(String[] args) {
//创建一个加权有向图
Graph<String, DefaultWeightedEdge> graph =
new SimpleDirectedWeightedGraph<>(DefaultWeightedEdge.class);
// 添加顶点
graph.addVertex("A");
graph.addVertex("B");
graph.addVertex("C");
graph.addVertex("D");
// 添加边和权重
DefaultWeightedEdge edge1 = graph.addEdge("A", "B");
graph.setEdgeWeight(edge1, 1);
DefaultWeightedEdge edge2 = graph.addEdge("B", "C");
graph.setEdgeWeight(edge2, 2);
DefaultWeightedEdge edge3 = graph.addEdge("C", "D");
graph.setEdgeWeight(edge3, 1);
DefaultWeightedEdge edge4 = graph.addEdge("A", "D");
graph.setEdgeWeight(edge4, 4);
// 使用Dijkstra算法查找最短路径
ShortestPathAlgorithm<String, DefaultWeightedEdge> dijkstraAlg =
new DijkstraShortestPath<>(graph);
SingleSourcePaths<String, DefaultWeightedEdge> dijkstraPaths =
dijkstraAlg.getPaths("A");
GraphPath<String, DefaultWeightedEdge> dijkstraPath = dijkstraPaths.getPath("D");
if (dijkstraPath != null) {
System.out.println("Dijkstra最短路径:" + dijkstraPath.getVertexList() +
",path weight:" + dijkstraPath.getWeight());
}
//使用Dijkstra算法查找最小成本路径
ShortestPathAlgorithm<String, DefaultWeightedEdge> dijkstraAlg2 =
new DijkstraShortestPath<>(graph, edge -> graph.getEdgeWeight(edge));
SingleSourcePaths<String, DefaultWeightedEdge> dijkstraPaths2 =
dijkstraAlg2.getPaths("A");
GraphPath<String, DefaultWeightedEdge> dijkstraPath2 = dijkstraPaths2.getPath("D");
if (dijkstraPath2 != null) {
System.out.println("Dijkstra最小成本路径:" + dijkstraPath2.getVertexList() +
",path cost:" + dijkstraPath2.getWeight());
}
}
}
上面的示例代码创建了一个加权有向图,并使用Dijkstra算法查找了最短路径和最小成本路径。
可以使用该示例代码作为一个基础,为不同的场景和需求编写定制的代码。