1

我想A<->B在 JGraphT 0.8.3 中制作一个简单的无向无标签(边没有标签)图:

import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

class A {
    public static void main(String[] args) {
        SimpleGraph<String, String> sg =
            new SimpleGraph<String, String>(String.class);
        sg.addVertex("A");
        sg.addVertex("B");
        sg.addEdge("A", "B");
        System.out.println("edges of A: " + sg.edgesOf("A"));
        System.out.println("edges of B: " + sg.edgesOf("B"));
    }
}

我得到这个输出:

$ java -cp 'jgrapht-jdk1.6.jar:.' A
edges of A: []
edges of B: []

为什么顶点的边集是AB的?还有for的类参数是SimpleGraph什么?它似乎是边缘的类型,但是由于我这里的边缘没有标记,所以肯定没关系吗?所有的图类似乎都将边 ( edgeClass) 的类作为参数。我找不到文档edgeClass中描述的位置。


我发现如果我标记边缘(将addEdge线更改为sg.addEdge("A", "B", "an_edge");)然后它可以工作......但我不想标记边缘......

$ java -cp 'jgrapht-jdk1.6.jar:.' A
edges of A: [an_edge]
edges of B: [an_edge]
4

1 回答 1

2

您不必标记边缘。您的方法中的问题是您告诉图形使用字符串作为边类型。一个适当的标准。做事的方式是:

    SimpleGraph<String, DefaultEdge> sg = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);
    sg.addVertex("A");
    sg.addVertex("B");
    sg.addVertex("C");
    sg.addEdge("A", "B");
    sg.addEdge("B", "C");
    System.out.println("graph: " + sg.toString());
    System.out.println("edges of A: " + sg.edgesOf("A"));
    System.out.println("edges of B: " + sg.edgesOf("B"));

这将为您提供以下输出:

graph: ([A, B, C], [{A,B}, {B,C}])
edges of A: [(A : B)]
edges of B: [(A : B), (B : C)]

因此,要解决此问题,有必要将您的边缘类切换到 DefaultEdge,如代码所示。

于 2013-04-26T09:10:52.943 回答