如何在 DefaultDirectedGraph 或 JGraphT 中表征边?
How to have characterize edges in DefaultDirectedGraph or JGraphT?
我正在使用 DefaultDirectedGraph 创建有向图,其中每个顶点都是一个对象。
DefaultDirectedGraph g = new DefaultDirectedGraph(DefaultEdge.class);
我想知道是否可以表征边缘?比如我想保留同学之间的友情信息。
或者我应该在边缘和友谊对象之间有一个映射吗?
你当然可以在边缘存储信息。这是我最近自己使用的一个用例:
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);
}
备注:
- Street extends DefaultWeightedEdge: 在最新版本的 jgrapht 中不再需要扩展 DefaultEdge 或 DefaultWeightedEdge
- 在jgrapht中,所有的边都是对象。当你在上面的例子中使用自定义对象(如 Street)时,你只能使用 addEdge(vertex1, vertex2, edgeObject) 方法。您不能使用 addEdge(vertex1,vertex2) 方法,除非您向图形构造函数提供 EdgeFactory。
- 一个常见的错误是将图形信息存储在边上。例如。将源和目标交叉点(街道的 2 个端点)存储在街道对象本身上是错误的。此信息存储在图中。
- 在实现您自己的顶点或边 类 时,您 必须 实现 equals 和 hashCode methods.See https://github.com/jgrapht/jgrapht/wiki/Users:-EqualsAndHashCode 以获取详细信息。
我正在使用 DefaultDirectedGraph 创建有向图,其中每个顶点都是一个对象。
DefaultDirectedGraph g = new DefaultDirectedGraph(DefaultEdge.class);
我想知道是否可以表征边缘?比如我想保留同学之间的友情信息。
或者我应该在边缘和友谊对象之间有一个映射吗?
你当然可以在边缘存储信息。这是我最近自己使用的一个用例:
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);
}
备注:
- Street extends DefaultWeightedEdge: 在最新版本的 jgrapht 中不再需要扩展 DefaultEdge 或 DefaultWeightedEdge
- 在jgrapht中,所有的边都是对象。当你在上面的例子中使用自定义对象(如 Street)时,你只能使用 addEdge(vertex1, vertex2, edgeObject) 方法。您不能使用 addEdge(vertex1,vertex2) 方法,除非您向图形构造函数提供 EdgeFactory。
- 一个常见的错误是将图形信息存储在边上。例如。将源和目标交叉点(街道的 2 个端点)存储在街道对象本身上是错误的。此信息存储在图中。
- 在实现您自己的顶点或边 类 时,您 必须 实现 equals 和 hashCode methods.See https://github.com/jgrapht/jgrapht/wiki/Users:-EqualsAndHashCode 以获取详细信息。