我有一个关于在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);
}
答案 0 :(得分:0)
topSortHelper是深度优先搜索,第一个参数应该是顶点id而不是boolean visited [w],它可能是一个错字:
更改行&#34; this.topSortHelper(访问[w],访问,堆叠);&#34;到&#34; this.topSortHelper(w,visited,stack);&#34;
如果你仍然遇到顶级排序实现的问题,我已经在github托管的图库中实现了顶级排序的工作版本,你可以看看它的实现:)