我想制作一个简单的无向无标记(边未标记)图 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: []
为什么顶点的边集是A
和B
空的?另外 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/