Я попытался реализовать итеративный поиск в глубину, используя этот псевдокод:
iterative DFS(Vertex v)
mark v visited
make an empty Stack S
push all vertices adjacent to v onto S
while S is not empty do
Vertex w is pop off S
for all Vertex u adjacent to w do
if u is not visited then
mark u visited
push u onto S
который я нашел по этой ссылке: http://www.csl.mtu.edu/cs2321/www/newLectures/26_Depth_First_Search.html
Но когда я реализовал его и протестировал на нескольких тестовых примерах, он не дает ожидаемого результата, то есть вершины не печатаются в ожидаемом порядке. Вот мой код:
public void dfs(int start) {
Stack<Integer> stack = new Stack<>();
boolean[] visited = new boolean[E.length];
stack.push(start);
while(!stack.empty()) {
Integer vertex = stack.pop();
System.out.print(vertex + " ");
for(Edge e: E[vertex]) {
if(!visited[e.v]) {
stack.push(e.v);
visited[e.v] = true;
}
}
}
}
Я спрашиваю, может ли кто-нибудь помочь мне с реализацией псевдокода и помочь мне понять мою ошибку.