java - 如何知道图中是否存在顶点?

标签 java data-structures graph

我正在制作一种从文件加载图表的方法。这很简单,但是如果有重复的顶点,该方法也会插入到图中,所以我试图避免这种情况。

这是我当前的代码:

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/

相关文章:

c - C 中的树结构,用于以预序深度优先方式导航

javascript - 当数据类型为数字时,如何对谷歌图X轴进行排序

graph - 在 plotly 中平滑热图

php - 将 HighChart 与其他页面内容一起导出为 excel 文件中的图像

java - 如何在 Android 中执行 Java HTTP GET 调用并等待响应?

java - 没有提交 Ignite CacheStoreAdapter

java - 如何创建所有 Android 设备通用的相机 Action

java - Spring-如何使用PropertyPlaceholderConfigurer动态加载文件

c - C 中的结构

mysql - 插入MySQL队列的中间