C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用してグラフ内のシンクノードの数を見つける


この記事では、グラフ内のシンクノードの数を解決するための重要な情報について説明します。この問題では、N個のノード(1からN)とM個のエッジを持つ有向非巡回グラフがあります。目標は、指定されたグラフにシンクノードがいくつあるかを見つけることです。シンクノードは、出力エッジを生成しないノードです。簡単な例を次に示します-

Input : n = 4, m = 2

Edges[] = {{2, 3}, {4, 3}}
Output : 2

解決策を見つけるための簡単なアプローチ

このアプローチでは、グラフのエッジを調べ、エッジの元となるセット内の個別の要素をプッシュしてから、存在するノードの総数からセットのサイズを減算します。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n = 4; // number of nodes.
    int m = 2; // number of edges.
    vector<pair<int, int>> edges = {{2, 3}, {4, 3}}; // the edges going from first to second.
    set<int> s;
    for(int i = 0; i < m; i++){
        s.insert(edges[i].first); // will keep value of
                               // distinct node from which edges are going out.
    }
    cout << n - s.size(); // answer is the total number of nodes - number of non sink nodes.
    return 0;
}

出力

2

上記のコードの説明

このコードでは、ベクトルエッジをトラバースし、ペアの最初の要素をセットに挿入します。個別の要素のみを保持するため、ノードの総数からセットの特定のサイズを減算します。上に示したプログラムは、 O(N)の時間計算量を持っています ここで、Nはグラフに存在するエッジの数を表します。

結論

この記事では、セットの助けを借りて、グラフのO(N)時間計算量に存在するシンクノードの数を見つける問題を解決しました。また、この問題のC ++プログラムと、この問題を解決するための完全なアプローチについても学びました。同じプログラムを、C、java、python、その他の言語などの他の言語で作成できます。この記事がお役に立てば幸いです。


  1. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります

  2. C++を使用してセットの反射関係の数を見つける

    この記事では、集合上の反射関係の数を見つけるためのアプローチについて説明します。この問題では、数nが与えられ、n個の自然数のセットで、反射関係の数を決定する必要があります。 反射関係 −集合Aの関係は、(a、a)が集合Aに属するすべてのaがRに属する場合、反射的と呼ばれます。たとえば、- Input : x = 1 Output : 1 Explanation : set = { 1 }, reflexive relations on A * A : { { 1 } } Input : x = 2 Output : 4 Explanation : set = { 1,2 }, reflex