如何创建具有相同权重和相同源顶点的多个边?

时间:2019-05-03 17:10:00

标签: java graph graph-theory jgrapht

我正在使用jgrapht,在这里遇到问题。一旦从一个源顶点创建具有相同权重的两条边,我最终只有一条边:

DirectedWeightedPseudograph<Object, Object> Grph1 = new DirectedWeightedPseudograph<>(Object.class);

    Grph1.addVertex("a");
    Grph1.addVertex("b");
    Grph1.addVertex("c");

    Grph1.addEdge("a", "b", "55");
    Grph1.addEdge("a", "c", "55");

我希望输出:

a--55-->b
a--55-->c

但是实际输出:

a--55-->b
c

2 个答案:

答案 0 :(得分:1)

您没有创建两个边缘。您仅创建一个一个边,该边为"55"。右:字符串"55" 在示例中的边缘。

为了创建具有实际权重的多个边缘(需要双关语),应声明图形具有正确的类型,即使用DefaultWeightedEdge作为边缘类型的图形。

然后,当通过调用addEdge添加新边时,将收到DefaultWeightedEdge实例。使用此实例,您可以通过调用setEdgeWeight来为此边缘分配 weight

Graph<String, DefaultWeightedEdge> g = new DirectedWeightedPseudograph<>(DefaultWeightedEdge.class);
g.addVertex("a");
g.addVertex("b");
g.addVertex("c");

DefaultWeightedEdge e0 = g.addEdge("a", "b");
g.setEdgeWeight(e0, 55.0);

DefaultWeightedEdge e1 = g.addEdge("a", "c");
g.setEdgeWeight(e1, 55.0);

System.out.println(g.edgeSet());

答案 1 :(得分:0)

从文档中:

  

如果该图不包含边e2使得e2.equals(e),则将指定的边e添加到该图

Object o1=Grph1.addEdge("a", "b", "55");
Object o2=Grph1.addEdge("a", "c", "55");
boolean test=o1.equals(o2); //this will return true

与其使用<Object,Object>创建图形,不如使用其他方法,例如<String,DefaultWeightedEdge>,如示例所示:

Graph<String,DefaultWeightedEdge> g=new DirectedWeightedPseudograph<>(DefaultWeightedEdge.class);
g.addVertex("a");
g.addVertex("b");
g.addVertex("c");

g.addEdge("a", "b", "55");
g.addEdge("a", "c", "55");