【问题标题】:detecting a cycle from a Graph从图中检测循环
【发布时间】:2013-04-24 17:01:25
【问题描述】:

如何从显示深度优先搜索的这部分代码中检测图形是否具有循环,并且图形是在邻接矩阵中实现的

   // ------------------------------------------------------------
    public void dfs() // depth-first search
    { // begin at vertex 0
        int k = 0;
        vertexList[0].wasVisited = true; // mark it
        displayVertex(0); // display it
        theStack.push(0); // push it
        while (!theStack.isEmpty()) // until stack empty,
        {
            // get an unvisited vertex adjacent to stack top
            int v = getAdjUnvisitedVertex(theStack.peek());
            int x = nAdjVisitedVertex(v);

            if (v == -1) // if no such vertex,
                theStack.pop();
            else // if it exists,
            {
                vertexList[v].wasVisited = true; // mark it
                displayVertex(v); // display it
                if (x == 2)
                    k++;

                theStack.push(v); // push it

            }
        } // end while
            // stack is empty, so we’re done
        for (int j = 0; j < nVerts; j++)
            // reset flags
            vertexList[j].wasVisited = false;

        if(k != 0)
            System.out.println("not a cycle");
        else
            System.out.println("cycle");

    } // end dfs

【问题讨论】:

  • 您似乎很难提出好的问题。我们是一个非常有帮助的社区,但如果您提出一个深思熟虑的问题,表明您已经付出了一些努力,您会发现我们更有帮助。请仔细阅读该网站的常见问题解答。
  • 这是有向图还是无向图?
  • @workInAFishBowl 抱歉,我在网上搜索过,但我今天需要这个!我只需要一个想法来自己实现它,而不是整个代码。

标签: java matrix graph cycle depth-first-search


【解决方案1】:

在遍历图的时候,你需要不断的寻找已经访问过的节点。如果你遇到一个已经被访问过的节点,你就发现了一个循环。如果遍历完成而没有得到任何访问节点,则图中没有循环。而关于实施,请先尝试,如果您遇到任何问题,请返回问题。

【讨论】:

  • 这只适用于无向图,但这就是 Khan 所说的
  • 从示例来看,它似乎是一个无向图遍历。但可悲的是,简单的 google 搜索却提供了如此多的运行代码、伪代码、示例、示例,令人不知所措。那么在寻求帮助之前尝试过吗??
  • 我在编辑之前回到了您的代码,在getAdjUnvisitedVertex 中,如果未访问该节点,您将返回该节点。也许在nAdjVisitedVertex 内部,您正在检查该节点是否被访问。因此,nAdjVisitedVertex 的所有输入都已验证未访问。这使得if (x == 2) 永远不会成为现实。使getAdjUnvisitedVertex 按顺序返回所有节点,无论是否访问。如果你发现任何节点被访问,打破一切,所有循环,因为你发现了一个循环,否则你可能会陷入循环本身。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多