Неожиданное поведение реализации псевдокода поиска в глубину - PullRequest
0 голосов
/ 06 сентября 2018

Я попытался реализовать итеративный поиск в глубину, используя этот псевдокод:

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

Я спрашиваю, может ли кто-нибудь помочь мне с реализацией псевдокода и помочь мне понять мою ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...