Проблема с поиском в глубину

127
13 октября 2019, 04:50

написал рекурсивную реализацию поиска в глубину, которая отлично работает:

void DFSRecursive(int vertex, const std::vector<std::vector<int>>& graph, std::vector<bool>& visitedVertices)
{
    visitedVertices.at(vertex) = true;
    for (std::uint8_t i = 0; i < graph.size(); i++)
        if ((graph.at(vertex).at(i) != 0) && (!visitedVertices.at(i)))
            DFSRecursive(i, graph, visitedVertices);
}

После чего решил написать не рекурсивную реализацию, и столкнулся с проблемой зацикливания в разных участках... Да и к тому же алгоритм получился очень медленным из-за постоянного поиска в векторе. Может кто-нибудь подскажет более элегантное решение и в чем была проблема? Вот сам код:

void DFSNonRecursive(int startVertex, const std::vector<std::vector<int>>& graph)
{
    std::vector<int> visitedVertices;
    visitedVertices.push_back(startVertex);
    while (!visitedVertices.empty())
    {
        const int vertex = visitedVertices.back();
        bool hasAdjacentVertices = false;
        for (std::uint8_t i = 0; i < graph.size(); i++)
        {
            auto iterator = std::find(visitedVertices.begin(), visitedVertices.end(), i);
            if ((graph.at(vertex).at(i) != 0) && (iterator == visitedVertices.end()))
            {
                visitedVertices.push_back(i);
                hasAdjacentVertices = true;
            }
        }
        if (!hasAdjacentVertices)
            visitedVertices.pop_back();
    }
}
READ ALSO
Копирование и перемещение

Копирование и перемещение

Когда лучше использовать копирование, а когда перемещение? (Когда большие объекты лучшие копировать(даже если дальше их не используем)?)

138
Компиляция в Eclipse C++ (Linux)

Компиляция в Eclipse C++ (Linux)

подскажите как Вы компилируете в Eclipse?

118
Принцип работы функции getche()

Принцип работы функции getche()

Программа должна посчитать количество символов и слов в введённой строке, считывание осуществляется при помощи функции getche()

123
Как найти путь бинарного файла?

Как найти путь бинарного файла?

Исполняемое приложение подключает плагинКак внутри этого плагина узнать абсолютный путь по которому он лежит?

134