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