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

WBOY
リリース: 2023-09-01 19:25:05
転載
672 人が閲覧しました

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 などの他の言語で書くことができます。この記事がお役に立てば幸いです。

以上がC++ を使用してグラフ内のシンク ノードの数を見つけるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート