我正在制作一种从文件加载图表的方法。这很简单,但是如果有重复的顶点,该方法也会插入到图中,所以我试图避免这种情况。
这是我当前的代码:
public static Graph<ElementoDecorado<Integer>, String> loadGraphFromFile(File f) {
boolean v1_exists = false, v2_exists = false;
Graph<ElementoDecorado<Integer>, String> g = new AdjacencyListGraph<ElementoDecorado<Integer>, String>();
Vertex<ElementoDecorado<Integer>> v1, v2, aux = null;
Scanner fr;
try {
fr = new Scanner(f);
while(fr.hasNextLine()) {
v1 = g.insertVertex(new ElementoDecorado<Integer>(fr.nextInt()));
v2 = g.insertVertex(new ElementoDecorado<Integer>(fr.nextInt()));
for(Vertex<ElementoDecorado<Integer>> v : g.vertices()) {
if(v.equals(v1)) {
/*aux = v;
v1_exists = true;*/
}
if(v.equals(v2)) {
/*aux = v;
v2_exists = true;*/
}
}
g.insertEdge(v1, v2, "edge");
v1_exists = v2_exists = false;
}
} catch(FileNotFoundException e) {
e.printStackTrace();
}
return g;
}
我不知道两个if中该写什么。我尝试删除顶点(如果它们相等),但显然这不起作用,因为最后我的图将是空的:S
This is the manual page用于顶点接口(interface)。
欢迎任何帮助。 谢谢,圣诞快乐!
最佳答案
您应该首先检查什么 graph.insertVertex(V value)
做。如果包构建得体(我对糟糕的文档表示怀疑),那么该方法只会创建一个新的顶点,如果顶点带有 value
尚不存在;否则返回值 value
的现有顶点。
但是,我无法从非文档中判断该包是否真的假设给定值有一个顶点以及 insertVertex
是否真的存在。行为正确。
这是案例 insertVertex
的一些代码不检查重复:
(为了便于阅读,我将 ElementoDecorado<Integer>
替换为 Integer
)
while(fr.hasNextLine()) {
int nodeId1 = fr.nextInt();
int nodeId2 = fr.nextInt();
Vertex<Integer> vert1 = null;
Vertex<Integer> vert2 = null;
for(Vertex<Integer> v : g.vertices()) {
int nodeId = v.element();
if(nodeId == nodeId1)
vert1 = v;
else if (nodeId == nodeId2) // assumes can't have nodeId1 == nodeId2
vert2 = v;
}
if (vert1 == null)
vert1 = g.insertVertex(nodeId1);
if (vert2 == null)
vert2 = g.insertVertex(nodeId2);
g.insertEdge(vert1, vert2, null);
}
关于java - 如何知道图中是否存在顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647809/