Поиск циклов между двумя вершинами в графе

Делаю алгоритм краскала, но для него нужен поиск циклов

#include <iostream>
#include <vector>
#include <algorithm>
void dfs(int v, int u);
int main()
{
    const int N = 10;
    int smezh[N][N] =                      //таблица смежности с весом ребер
    {
        {0,10,0,0,20,0,0,15,0,0},
        {10,0,5,0,0,0,0,2,8,9},
        {0,5,0,16,0,0,0,0,4,0},
        {0,0,16,0,28,25,0,0,11,9},
        {20,0,0,28,0,15,0,0,0,0},
        {0,0,0,25,15,0,10,0,7,5},
        {0,0,0,0,0,10,0,11,0,3},
        {15,2,0,0,0,0,11,0,4,14},
        {0,8,4,11,0,7,0,4,0,0},
        {0,9,0,9,0,5,3,14,0,0}
    };

    int arr[N][N]{}, vershx[N]{}, vershy[N]{}, sum = 0;
    int min = INT_MAX;
    std::vector<int> minn;
    for (int i = 0; i < N; i++) {
        for (int j = i; j < N; j++) {
            if (smezh[i][j] > 0) {
                min = smezh[i][j];
                minn.push_back(min);
            }
        }
    }
    sort(minn.begin(), minn.end());  //сортировка ребер по возрастанию

    for (int z = 0; z < minn.size(); z++) {
        for (int i = 0; i < N; i++) {
            for (int j = i; j < N; j++) {
                if (minn[z] == smezh[i][j] && dfs(i,j) && dfs(j,i)) { //находит ребро и проверяет наличие циклов между 2 вершинами
                    sum += minn[z];
                    std::cout << i << " - " << j << " Weight: " << minn[z] << ". Interim amount: " << sum << std::endl;
                }
            }
        }
    }

    return 0;
}
void dfs(int v, int u)    //в интернете пишут, что нужно воспользоваться поиском в глубину, 
//но из-за отсутствия комментариев ничего непонятно
{
    int white = 0;
    int grey = 1;
    int black = 2;
    static int color[N]{};
    color[v] = grey;             
    if (color[u] == white)
        dfs(u);
    if (color[u] == grey)
        return 0;            
    color[v] = black;
    return 1;
}
    

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