java - 为什么这会导致堆栈溢出错误?有向图

标签 java recursion methods directed-graph

我正在尝试创建一种遍历有向图的方法,并且所有顶点都是灰色或黑色,如果它变成黑色,则将根标记为黑色,因此表示它不会生成树。这个一直给我一个堆栈溢出错误。我希望它即使遇到黑色的,仍然继续深度搜索,这样它就不会错过任何之后的内容。

void colorRoots(Vertex root, Vertex v) {

    if (v.getColor() == DiGraph.BLACK) {
        root.setColor(DiGraph.BLACK);
    }

    for (Vertex g : v.neighbors()) {
        if (g.getColor() == DiGraph.GREY || g.getColor() == DiGraph.BLACK) {
            colorRoots(root, g); 
        }
    }
}

这是我用来遍历每个根一次并着色的方法。所以我先调用它,然后再用 root 调用上面的内容。

void dfs(Vertex v) {

    if(v.getColor()==DiGraph.GREY) {
        v.setColor(DiGraph.BLACK);
    }else {
        v.setColor(DiGraph.GRAY);
    }


    for (Vertex g : v.neighbors()) {
        if(g.getColor()==DiGraph.WHITE || g.getColor()==DiGraph.GREY) {
        dfs(g); 
        }
    }   
    } 

问题可能出在 dsf 方法中吗?

我脑子里的整个计划是从所有潜在的根遍历一次图表,然后再做一遍,并将所有不能生成树的根标记为黑色。

最佳答案

检查您在 dfs 中如何拼写“GRAY”与“GREY”,可能是问题所在。

关于java - 为什么这会导致堆栈溢出错误?有向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53483104/

相关文章:

java - 在 Java 方法中更改数组值而不将其传递给方法

java - 将 "this"作为方法参数传递 - 说明

Java 将字符串转换为整数进行比较

java.lang.TypeNotPresentException : Type org. apache.maven.plugin.surefire.SurefirePlugin 不存在 - MAVEN

javascript - 具有不同子名称的递归 JSON 对象显示

scala - 在 Scala 中用于理解性评估的奇怪 (?)

c++ - 排序数组c++中的递归二进制搜索

java - 将代码重构为只有 return 语句

java - 如何根据屏幕可见情况将长 JSON 响应划分为模块以在 ListView 或 RecyclerView 中显示?

java - 如何在 Eclipse 中安装 android-rss (org.mcsoxford.rss)?