そこで、最近、非再帰バージョンの DFS を実装しました。ノードがスタックにプッシュされるとすぐに、またはポップアウトされるとすぐに、ノードを「訪問済み」とマークできることがわかりました。私が取り組んでいた問題は、スタックにプッシュされたときに「訪問済み」とマークするように具体的に述べられていました。どちらのバージョンもある種の DFS です。それとも、一方が DFS で、もう一方がそうでないようなものですか。どんな提案も歓迎します。
私が思うのは、2 番目の方法を実行すると、再帰的な dfs を模倣するということです。しかし、なぜもう一方は機能するのでしょうか。
再帰的な dfs (これは無視してください)
dfsRec(node)
{
visitedArray[node]=1;
for all neighbours of node
if they aren't visited
dfsRec(neighbour);
}
dfs(startNode)
{
visitedArray;
dfsRec(startNode);
}