Попытка перечислить все входные пути (путь, начинающийся с вершины с нулевой степенью) к целевой вершине.
Все входящие / исходящие ребра хранятся в векторе, называемом вершинами.
Я пытаюсь использовать рекурсию, чтобы пройти, начиная с цели, работать в обратном направлении и на каждом входящем узле, рекурсивно вызывать и извлекать пути до вершины, у которой размер входящего векторного ребра равен нулю (то есть не зависит от нуля).
Все различные пути хранятся в векторе с использованием конкатенации строк.
Функция печатает правильное количество различных путей и их начальных вершин, но некоторые пути после этого пропускают некоторые вершины. Я не уверен в том, что вызывает эту проблему.
bool enum_paths_helper(int target, vector<string> &paths, int &y) {
if (has_cycle() || target < 0 || target >= num_nodes())
return false;
int i;
if (vertices[target].incoming.size() == 0) {
y = paths.size();
paths.push_back(vertices[target].name);
return true;
}
for (i = 0; i < vertices[target].incoming.size(); i++) {
enum_paths_helper(vertices[target].incoming[i].vertex_id, paths, y);
paths[y] = paths[y] +" " + vertices[target].name;
}
return true;
}
Задача ещё не решена.
Других решений пока нет …