Я пытаюсь создать метод, который пересекает ориентированный граф, и все вершины либо серые, либо черные, если он становится черным, он помечает корень как черный и означает, что он не создает дерево.Этот продолжает давать мне ошибку переполнения стека.Я бы хотел, чтобы даже если он встретил черного, продолжайте поиск глубины, чтобы не пропустить ни одного после этого.
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?
Весь план, который у меня был в голове, проходил один раз из графикавсе потенциальные корни, затем делаем это снова и отмечаем все корни, которые не могут сделать дерево черным.