希望你过得很好!我正在尝试编写一个程序,在那里我需要创建一个动态加权图,并获得从一个顶点到另一个顶点的最短路径。但运行程序后,我得到了以下异常:
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`,而这个索引并不存在。
希望有帮助
本文向大家介绍图的边和顶点,包括了图的边和顶点的使用技巧和注意事项,需要的朋友参考一下 图是一组称为节点或顶点的点,它们由一组称为edge的线互连。图形或图形理论的研究是数学,工程学和计算机科学领域中许多学科的重要组成部分。 图论 定义-图形(表示为G =(V,E))由一组非空的顶点或节点V和一组边缘E组成。顶点a 表示边缘的端点。一条边连接两个顶点a,b ,并由其连接的一组顶点表示。 示例-让我
问题内容: 有人有使用过保险丝图形工具包的经验吗?是否可以更改已经显示的图形,即。添加/删除节点和/或边缘,并正确调整显示? 例如,prefuse附带一个示例,该示例形象化了一个朋友网络: http://prefuse.org/doc/manual/introduction/example/Example.java 我想做的事情与此类似: 但这似乎不起作用。有什么提示吗? 问题答案: 正如我在另一
问题内容: 我创建了一个扩展awt.Polygon类的类。我正在尝试编写一种方法,该方法给出了多边形的PathIterator和一个表示顶点的Point,将点添加到路径中的适当位置。 例如:一个点为(0,0)(0,10)(10,10)(10,0)(正方形)的多边形,给定点(1,5)将使多边形(0,0) (1,5)(0,10)(10,10)(10,0) 提前致谢 问题答案: 扩展@normaloci
我有一个由顶点和边表示的图的文本文件(邻接列表)。有没有一个工具来创建一个图形的可视化,它可以读取一个文本文件? 文本文件的格式为 它是一个无向图。0 1 2表示0个邻居1,0个邻居2,反之亦然,因为它是无向的. 谢谢 鲁珀特
图的变换有什么算法或名称吗?可以把边变换成顶点,顶点变换成边?这样我们就可以得到一个新的图形或者类似的问题?我不确定这是否真的有意义,但我会很高兴,如果你能给我任何关于这样一个问题的提示。
GraphX暴露保存在图中的顶点和边的RDD。然而,因为GraphX包含的顶点和边拥有优化的数据结构,这些数据结构提供了额外的功能。顶点和边分别返回VertexRDD和EdgeRDD。这一章 我们将学习它们的一些有用的功能。 VertexRDDs VertexRDD[A]继承自RDD[(VertexID, A)]并且添加了额外的限制,那就是每个VertexID只能出现一次。此外,VertexRDD