Сложность DFS - O (V + M), поэтому, если она занимает более 10 секунд, что-то не так.Первое, что я вижу, это то, что вы добавляете узлы в стек, не отмечая их как посещенные, поэтому несколько узлов могут в конечном итоге добавить один и тот же узел в стек.
Попробуйте добавить visited[neighbor] = true;
после stack.push(neighbor);