jgrapht的自定义边缘

pad*_*wan 4 java jgrapht

我想定义一个自定义边

public class Connection extends DefaultWeightedEdge
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用时,super()这可能吗?创建图形时应为EdgeFactory使用什么?

new SimpleWeightedGraph<Sensor, Connection>(EdgeFactory.class);
Run Code Online (Sandbox Code Playgroud)

这样就足够了吗?还是我应该创建一个新的扩展类EdgeFactory?

Chr*_*eis 7

您不需要子类DefaultWeightedEdge来创建自定义边缘,以下方法也可以。我当前正在使用JGraphT的0.9.0版本。

类定义:

public class Connection {
    // class implementation
    // define all constructors and methods you need
}
Run Code Online (Sandbox Code Playgroud)

图形创建:

SimpleWeightedGraph<Sensor, Connection> graph;
graph = new SimpleWeightedGraph<Sensor, Connection>(Connection.class);
Run Code Online (Sandbox Code Playgroud)

添加自定义边缘并设置权重:

Sensor v1 = // sensor instance
Sensor v2 = // another sensor instance
graph.addVertex(v1);
graph.addVertex(v2);

Connection connection = new Connection(/* ... */);
graph.addEdge(v1, v2, connection);
graph.setEdgeWeight(connection, 10.0);
Run Code Online (Sandbox Code Playgroud)

另外还要考虑到实现equals和hashCode你的方法Connection类,因为0.8.4版本JGraphT依靠这些方法,请参阅EqualsAndHashCode文章。本文还提供了一个DefaultWeightedEdge子类化的示例。