написал рекурсивную реализацию поиска в глубину, которая отлично работает:
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();
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Когда лучше использовать копирование, а когда перемещение? (Когда большие объекты лучшие копировать(даже если дальше их не используем)?)
Программа должна посчитать количество символов и слов в введённой строке, считывание осуществляется при помощи функции getche()
Исполняемое приложение подключает плагинКак внутри этого плагина узнать абсолютный путь по которому он лежит?