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