1

現在、無向グラフを使ったプログラムを書いています。接続の隣接行列を作成することでこれを表しています。

if(adjacency_matrix[i][j] == 1){
    //i and j have and edge between them
}
else{
    //i and j are not connected
}

私がやろうとしているのは、特定のノードが接続されているすべてのノードを見つけることです (一連のエッジによって)。特定のノードに対してこれを行い、ノードがグラフ内の任意のパスによって特定のノードから到達可能かどうかによって決定されるベクトルの各スポットに 1 または 0 を含むベクトルを返す関数を作成しようとしました。次に、このベクトルを取得し、その中のすべての値を合計します。これにより、そのノードが到達可能なノードの量が返されます。次に、グラフ内のすべてのノードのこれらすべての値を取得してベクトルに入れ、最大サイクルのノードの量を表す最大値を見つけます。

私の問題は、関数定義コードでエラーが発生したことではありませんが (私はそうです)、この再帰関数を間違って記述していることに気づきましたが、ニーズを満たすためにそれを変更する方法についての手がかりがありません。以下にコードを含めました。ガイダンスをいただければ幸いです。

関数定義:

vector<int> get_conn_vect(int u, int conns, vector<vector<int>> vv, vector<int> seen)
{
    seen.at(u) = 1;
    while(v < conns)
    {
        if(seen.at(v) == 0 && vv.at(u).at(v) == 1)
        {
            get_conn_vect(v, conns, vv, seen);
            v++;
        }

        else
        {
            v++;
        }
    }
    return seen;
}

main.cpp を呼び出します。

std::vector<int> conn_vect;
int sum_of_elems = 0;
for(int i = 0; i < num_nodes; i++)
{
    std::vector<int> seen_vect(matrix.size());
    sum_of_elems = 0;
    seen_vect = get_conn_vect(i, num_conn, matrix, seen_vect);
    conn_vect.push_back(sum_of_elems = std::accumulate(seen_vect.begin(), seen_vect.end(), 0));
}
4

2 に答える 2