0

我想制作一个简单的图,它是一个没有节点自循环的图。在在线可用的教程中,据说我应该使用 SimpleGraph 接口,但是它不起作用,因为它在任何 jar 中都找不到。我可以做些什么来禁用自循环,或者我应该只是为了前。在每次释放鼠标键时检查是否正在添加任何自循环并删除这样的边缘,这将是非常低效的。

4

2 回答 2

1

正如上面所说的没有。3 你的代码应该是这样的:

public class UndirectedSimpleGraph<V,E> extends UndirectedSparseGraph<V,E> {

public UndirectedSimpleGraph(){
    super();
}

public boolean addEdge(E edge, Pair<? extends V> endpoints, EdgeType edgeType){
    Pair<V> new_endpoints = getValidatedEndpoints(edge, endpoints);
    if (new_endpoints == null)
        return false;

    V v1 = new_endpoints.getFirst();
    V v2 = new_endpoints.getSecond();

    if(v1.equals(v2))
        return false;
    else
        return super.addEdge(edge,endpoints,edgeType);
}
于 2013-04-11T18:45:05.643 回答
0

我不知道那是什么教程,但是 JUNG 没有“SimpleGraph”界面。

但是,您可以通过以下机制之一自己轻松完成此操作:

  1. 正如您所建议的:确定添加的边缘是自循环并将其删除
  2. 一旦目标顶点已知,仅在 source != destination 时调用 addEdge()
  3. 创建一个覆盖 addEdge() 并拒绝自循环的首选图形类型的子类。

我不明白你为什么认为这是低效的;这些检查中的任何一个都是 O(1)。

于 2013-04-10T17:22:45.723 回答