我正在使用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
答案 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");