Во-первых, из вашего псевдокода неясно, где вызывается map :: operator [] , так как итерация карты обычно выполняется без нее (в линейное время).
Во-вторых, в зависимости от структуры графа (т.е. это дерево?) Ваш алгоритм может посещать одни и те же узлы несколько раз, что потенциально может привести к экспоненциальной временной сложности.Если он содержит направленные циклы, он никогда не прекратит работу.
Со следующим кодом C ++ вы действительно получите O (V + E) сложность времени.
void dfs(Node& node) {
if(node.visited) return;
node.visited = true;
for(Node& adj : node.adjacency_list) dfs(adj);
}
РЕДАКТИРОВАТЬ: Обратите внимание, что вы на самом деле получите O (E) сложность времени, но если E