Проблема с поиском отрицательного цикла в графе
В задании требуется вывести "YES", размер цикла и вершины входящие в этот цикл.(выводим любой цикл, если в графе их два)
Граф задан матрицей смежности.
Реализация графа:
class Graph{
private:
int num;
vector<vector<int>> path;
vector<int> result;
vector<bool> visited;
public:
Graph(int size){
num = size;
visited.resize(num, false);
path.resize(num, vector<int>(num));
}
Реализация:
void FloydWarshallAlgorithm(vector<vector<int>>& matrix){
if (num == 0 or num == 1){
cout << "NO" << endl;
return;
}
for (int vertex = 0; vertex < num; vertex ++){
for (int edge = 0; edge < num; edge ++){
path[vertex][edge] = matrix[vertex][edge];
}
}
for (int k = 0; k < num; k ++){
for (int v = 0; v < num; v ++){
for (int u = 0; u < num; u++){
if (path[v][k] != 0 and path[k][u] != 0 and path[v][k] + path[k][u] < path[v][u]){
result.push_back(k + 1);
path[v][u] = path[v][k] + path[k][u];
}
}
if (path[v][v] < 0){
cout << "YES" << endl;
reverse(result.begin(), result.end());
print();
return;
}
}
}
cout << "NO" << endl;
}
Проблема: Нахождение отрицательного цикла я смог реализовать, но не могу правильно сконструировать в vector result найденный мною цикл отрицательного веса, выводятся повторяющиеся вершины. Прошу помочь с тем, что делаю не так в своей реализации.