Проблема с поиском отрицательного цикла в графе

В задании требуется вывести "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 найденный мною цикл отрицательного веса, выводятся повторяющиеся вершины. Прошу помочь с тем, что делаю не так в своей реализации.


Ответы (0 шт):