org.jgrapht.graph.DefaultEdge 上 DefaultEdge 的方法getSource()
和getTarget()
受到保护。
如何访问 org.jgrapht.graph.SimpleGraph 的edgeSet()
返回的每条边的源顶点和目标顶点?
下面的代码显示了正在发生的事情。
import java.util.Set;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class TestEdges
{
public static void main(String [] args)
{
UndirectedGraph<String, DefaultEdge> g =
new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);
String A = "A";
String B = "B";
String C = "C";
// add the vertices
g.addVertex(A);
g.addVertex(B);
g.addVertex(C);
g.addEdge(A, B);
g.addEdge(B, C);
g.addEdge(A, C);
Set<DefaultEdge> edges = g.edgeSet();
for(DefaultEdge edge : edges) {
String v1 = edge.getSource(); // Error getSource() is protected method
String v2 = edge.getTarget(); // Error getTarget() is protected method
}
}
}
答案 0 :(得分:25)
根据JGraphT mailing list访问边缘源和目标的“正确”方法是使用接口getEdgeSource(E)
中的方法getEdgeTarget(E)
和Interface Graph<V,E>
org.jgrapht
然后
修改代码for(DefaultEdge edge : edges) {
String v1 = g.getEdgeSource(edge);
String v2 = g.getEdgeTarget(edge);
}
答案 1 :(得分:1)
在尝试提取边缘值时遇到类似问题,虽然不是OP的情况,但对于遇到此问题的其他人可能会有所帮助。
当我实例化我的图表并将其传递给边缘类时:
DirectedGraph graph = new SimpleDirectedGraph(DefaultEdge.class);
Netbeans给了我选择导入 DefaultEdge.class 文件的选项,我选错了。我使用 org.jgraph 库而不是 org.jgrapht 。
如果您使用的是DefaultEdge类,请确保使用的是jgrapht。
import org.jgrapht.graph.DefaultEdge;