Javascript - DFS拓扑/递归函数

时间:2017-02-25 18:54:46

标签: javascript algorithm recursion

我有一个关于在JS中实现dfs /拓扑排序的问题。

我的问题是关于递归调用的逻辑(函数topSortHelper(...))。 我们从顶点开始,首先打印它,然后递归调用topSortHelper(...)作为它的相邻点 顶点,我们不立即打印顶点,我们首先递归调用所有的拓扑排序 它的相邻顶点,然后将它推到一个堆栈。

有人可以解释一下为什么在下面的示例中的递归调用期间,而不是传递 相邻的顶点(未访问),我们改为传递布尔值“visited [w]”?

(PS:这个脚本可以在Javascript,Michael Mc Millian,第155页的数据结构和算法一书中找到);

提前致谢

function topSort() {
    var stack = [];
    var visited = [];

    for (var i = 0; i < this.vertices; i++) {
        visited[i] = false;
    }

    for (var i = 0; i < this.vertices; i++) {
        if (!visited[i]) {
        this.topSortHelper(i, visited, stack);
        }
    }

    for (var i = 0; i < stack.length; i++) {
        if (stack[i] !== false & stack[i] !== undefined) {
        console.log(this.vertexList[stack[i]]);
        }
    }
}

function topSortHelper(v, visited, stack) {
    visited[v] = true;

    for (var i = 0; i < this.adj[v]; i++) {
        var w = this.adj[v][i];

        if (!visited[w]) {
        this.topSortHelper(visited[w], visited, stack);
        }
    }
    stack.push(v);
}

1 个答案:

答案 0 :(得分:0)

topSortHelper是深度优先搜索,第一个参数应该是顶点id而不是boolean visited [w],它可能是一个错字:

更改行&#34; this.topSortHelper(访问[w],访问,堆叠);&#34;到&#34; this.topSortHelper(w,visited,stack);&#34;

如果你仍然遇到顶级排序实现的问题,我已经在github托管的图库中实现了顶级排序的工作版本,你可以看看它的实现:)

https://github.com/chen0040/js-graph-algorithms