首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在DefaultDirectedGraph或JGraphT中刻划边?

如何在DefaultDirectedGraph或JGraphT中刻划边?
EN

Stack Overflow用户
提问于 2018-03-18 04:46:00
回答 1查看 564关注 0票数 0

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

DefaultDirectedGraph g=新DefaultDirectedGraph(DefaultEdge.class);

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

或者我应该在友谊的边缘和对象之间画一张地图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-19 21:12:05

你当然可以在边缘存储信息。下面是我最近用过的一种用法:

代码语言:javascript
运行
复制
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 :在jgrapht的最新版本中不再需要扩展DefaultEdge或DefaultWeightedEdge
  2. 在jgrapht中,所有的边缘都是对象。在上面的示例中使用自定义对象(如Street)时,只能使用addEdge(vertex1、vertex2、edgeObject)方法。除非向图构造函数提供一个addEdge(vertex1,vertex2)方法,否则不能使用EdgeFactory方法。
  3. 一个常见的错误是将图形信息存储在边上。例如,将源和目标交叉点(街道的两个端点)存储在街道对象本身上是错误的。此信息存储在图表中。
  4. 在实现自己的顶点或边缘类时,必须实现equals和hashCode methods.See https://github.com/jgrapht/jgrapht/wiki/Users:-EqualsAndHashCode以获取详细信息。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49344537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档