如何在DefaultDirectedGraph或JGraphT中表征边缘?

时间:2018-03-18 04:46:00

标签: java jgrapht jgraph

我正在使用DefaultDirectedGraph来创建我的有向图,其中每个顶点都是一个对象。

DefaultDirectedGraph g = new DefaultDirectedGraph(DefaultEdge.class);

我想知道是否有可能表征边缘?例如,我想保留学生之间友谊的信息。

或者我应该在边缘和友谊对象之间有地图?

1 个答案:

答案 0 :(得分:0)

您当然可以在边缘存储信息。这是我最近自己使用的用例:

public class Intersection{
    public final long latitude;
    public final long longitude;
    public Intersection(long latitude, long longitude){ ...}
}

public class Street extends DefaultWeightedEdge{
    public final String streetName;
    public final int speedLimit;
    public final Street(...){...}
}

public class RoadNetwork{
    public final Graph<Intersection, Street> network=new DefaultDirectedGraph<>(Street.class);
    Intersection i1=new Intersection(..);
    Intersection i2=new Intersection(..);
    Street s=new Street(..);

    //Network with 1 street
    network.addVertex(i1);
    network.addVertex(i2);
    network.addEdge(i1,i2,s);
}

注意:

  1. Street扩展DefaultWeightedEdge:不再需要在jgrapht的最新版本中扩展DefaultEdge或DefaultWeightedEdge
  2. 在jgrapht中,所有边都是对象。在上面的示例中使用自定义对象(如Street)时,只能使用addEdge(vertex1,vertex2,edgeObject)方法。除非为图构造函数提供EdgeFactory,否则不能使用addEdge(vertex1,vertex2)方法。
  3. 常见的错误是在边缘存储图形信息。例如。在街道对象本身上存储源和目标交叉点(街道的2个端点)是错误的。此信息存储在图表中。