我正在尝试使用jung库实现kNN图的创建。我已经到了需要检查图中是否已存在2 Node
之间的链接的时刻。
到目前为止我的代码:
for (int i = 0; i < k; i++) {
for (Iterator<Node> it1 = mGraph.getVertices().iterator(); it1.hasNext();) {
Node n1 = (Node) it1.next();
double minDistance = 9999999;
Node toConnect = null;
for (Iterator<Node> it2 = mGraph.getVertices().iterator(); it2.hasNext();) {
Node n2 = (Node) it2.next();
double currDistance = this.getDistance(n1, n2);
if( currDistance < minDistance &&
mGraph.containsEdge( /* WHAT HERE */ ) ){
minDistance = currDistance;
toConnect = n2;
}
}
mGraph.addEdge(new Link(), n1, toConnect, EdgeType.DIRECTED);
}
}
我不知道怎么做,因为Link
只有一个没有任何参数的构造函数。
答案 0 :(得分:1)
我发现我可以通过以下方式执行此操作(如果有效且可以,可能有人会发表评论)
mGraph.isNeighbor(n1, n2)
答案 1 :(得分:1)
isNeighbor()适用于无向图或如果您不关心两个节点是如何连接的(即,现有边缘的方式,如果有的话)。对于有向图,您可能需要isPredecessor()。
答案 2 :(得分:0)
例如,如果您有两个节点,n1和n2,并且您的图形称为mGraph,则只需创建一个新方法:
public boolean existsLink(Node n1, Node n2) {
return mGraph.getNeighbors(n1).contains(n2);
}
如果返回true,则表示边缘存在;如果边不存在,则返回false。请注意,mGraph.getNeighbors(n1)是一个集合。
您还可以使用以下方法:mGraph.containsEdge(E edge)。但我不知道哪种类型是你的E边缘,以及它有哪些方法。