我们如何使用邻接矩阵在有向图上进行深度优先搜索,在邻接矩阵中从随机顶点开始探索所有顶点?我尝试实现dfs,但它仅探索从起始顶点可到达的顶点。
"hostPort": 8080
} }
答案 0 :(得分:1)
在有向图中,可能没有节点可以到达所有其他节点。那么在这种情况下您期望什么?
如果至少有一个节点可以到达所有其他节点,那么您现在只知道它是哪个节点,就可以选择一个随机节点,逆着输入边的方向寻找根您可以从中到达所有其他节点的节点。
答案 1 :(得分:0)
您的代码有两个问题,其中一个是您使用相同的顶点执行int vertex = s.pop();
,然后执行s.push(vertex);
。后者可能应该是s.push(i);
。
实现DF遍历的最简单方法是仅使用递归。然后代码衰减到
function dfs(v) {
if v not visited before {
mark v as visited;
for every adjacent vertex a of v do {
dfs(a);
}
do something with v; // this is *after* all descendants have been visited.
}
}
当然,每个递归实现都可以使用堆栈和迭代来等效地实现,但是在您的情况下,这会更加复杂,因为您不仅需要将当前顶点存储在堆栈上,而且还需要将状态存储在堆栈上子代的迭代次数(在您的情况下为循环变量i
)。