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

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);
        }
    }
}


这是我用来遍历每个根并着色的方法。因此,我在使用根调用上述方法之前先调用此方法。

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”的方式,可能是问题所在。

07-27 18:10