当前位置: 首页 > 知识库问答 >
问题:

jgrapht:添加顶点和边后的动态图形错误

呼延原
2023-03-14

希望你过得很好!我正在尝试编写一个程序,在那里我需要创建一个动态加权图,并获得从一个顶点到另一个顶点的最短路径。但运行程序后,我得到了以下异常:

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);
      }
      }

共有1个答案

晁璞
2023-03-14

实际上,您需要修改此循环:

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