gpt4 book ai didi

java - JGrapht:添加顶点和边后动态图错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:24 26 4
gpt4 key购买 nike

希望你一切顺利!我正在尝试编写一个程序,在该程序中我需要创建一个动态加权图并获得从一个顶点到另一个顶点的最短路径。但运行程序后我得到这个异常:

run:
TEST1
TEST Vertex Add
Exception in thread "main" java.lang.IllegalArgumentException: no such vertex in graph: 1
at org.jgrapht.graph.AbstractGraph.assertVertexExist(AbstractGraph.java:132)
at org.jgrapht.graph.AbstractBaseGraph.addEdge(AbstractBaseGraph.java:141)
at dijkstra.Dijkstra.main(Dijkstra.java:26)
C:\Users\Lucas\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

这是代码:

    import org.jgrapht.*;
import org.jgrapht.alg.*;
import org.jgrapht.graph.*;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import org.jgrapht.alg.shortestpath.DijkstraShortestPath;

public class Dijkstra {
public static void main(String args[]) {

SimpleWeightedGraph<String, DefaultWeightedEdge> graph = new SimpleWeightedGraph<String, DefaultWeightedEdge>(DefaultWeightedEdge.class);

int i = generateNumberByRange(1,5);

System.out.println("TEST1");
for(int j=0; j<i; j++){

graph.addVertex(String.valueOf(j));
System.out.println("TEST Vertex Add");

}
for(int j=0;j<i;j++){

DefaultWeightedEdge e1 = graph.addEdge(String.valueOf(j),String.valueOf(j+1));
graph.setEdgeWeight(e1, generateNumberByRange(10,20));
System.out.println(graph.getEdgeWeight(e1));
}

System.out.println("TEST2");
graph.addVertex(String.valueOf(i));
DefaultWeightedEdge e = graph.addEdge("0","1");
graph.setEdgeWeight(e, generateNumberByRange(10,20));


System.out.println("TEST3");

System.out.println("Shortest path from START to END:");
//List shortest_path = DijkstraShortestPath.findPathBetween(graph,"0",String.valueOf(i));
List shortest_path;
//shortest_path = DijkstraShortestPath.findPathBetween(graph, "0","2");
//System.out.println(shortest_path);

}

public static int generateNumberByRange(int START, int END){
return ThreadLocalRandom.current().nextInt(START, END + 1);
}
}

最佳答案

实际上你需要修改这个循环:

for(int j=0;j<i;j++){

DefaultWeightedEdge e1 = graph.addEdge(String.valueOf(j),String.valueOf(j+1));
graph.setEdgeWeight(e1, generateNumberByRange(10,20));
System.out.println(graph.getEdgeWeight(e1));
}

for(int j=0;j<i-1;j++){

DefaultWeightedEdge e1 = graph.addEdge(String.valueOf(j),String.valueOf(j+1));
graph.setEdgeWeight(e1, generateNumberByRange(10,20));
System.out.println(graph.getEdgeWeight(e1));
}

因为在循环结束时,您尝试获取具有此索引 i+1` 的顶点,但该顶点不存在。

希望这有帮助

关于java - JGrapht:添加顶点和边后动态图错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540706/

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