java - JGraphT 中的简单无向无标签图不起作用?什么是edgeClass参数?

标签 java reflection graph jgrapht

我想制作一个简单的无向无标记(边未标记)图 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空的?另外 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]

最佳答案

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

    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,如代码所示。

关于java - JGraphT 中的简单无向无标签图不起作用?什么是edgeClass参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218204/

相关文章:

r - 如何从尼尔森输出图表?

Java:可以命名集合吗?

java - 向 Android 电报源代码添加新语言

mysql - 如何使用 `SHOW COLUMNS` 作为有效数据源

c - 包含文件的图表

python - python中的文本挖掘图句子

java - 返回 int 的递归方法无法编译

java - itext-阿拉伯字符串不会显示在数字签名外观中

java - 选择当前类的方法而不是继承类的方法

Golang reflect,如何获取map值类型?