C++の無向グラフの連結成分の数
n個のノードがあり、それらに0からn -1のラベルが付けられ、無向エッジのリストも与えられているとすると、無向グラフで連結成分の数を見つけるために1つの関数を定義する必要があります。
したがって、入力がn =5で、edges =[[0、1]、[1、2]、[3、4]]、
のような場合
その場合、出力は2になります
これを解決するには、次の手順に従います-
-
関数dfs()を定義します。これにより、ノード、グラフ、visitedという配列が取得されます。
-
visited [node]がfalseの場合、-
-
訪問済み[ノード]:=true
-
-
初期化i:=0の場合、i <グラフ[ノード]のサイズの場合、更新(iを1増やします)、実行-
-
dfs(graph [node、i]、graph、visited)
-
-
メインの方法から、次のようにします-
-
サイズnの訪問された配列を定義します
-
nがゼロ以外の場合、-
-
配列グラフを定義する[n]
-
-
初期化i:=0の場合、i <エッジのサイズの場合、更新(iを1増やします)、実行-
-
u:=エッジ[i、0]
-
v:=エッジ[i、1]
-
グラフの最後にvを挿入します[u]
-
グラフの最後にuを挿入します[v]
-
-
ret:=0
-
初期化i:=0の場合、i
-
訪問されていない場合[i]がゼロ以外の場合、-
-
dfs(i、graph、visited)
-
(retを1増やします)
-
-
-
retを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: void dfs(int node, vector<int< graph[], vector<bool>& visited){ if(visited[node]) return; visited[node] = true; for(int i = 0; i < graph[node].size(); i++){ dfs(graph[node][i], graph, visited); } } int countComponents(int n, vector<vector<int<>& edges) { vector <bool> visited(n); if(!n) return 0; vector <int< graph[n]; for(int i = 0; i < edges.size(); i++){ int u = edges[i][0]; int v = edges[i][1]; graph[u].push_back(v); graph[v].push_back(u); } int ret = 0; for(int i = 0; i < n; i++){ if(!visited[i]){ dfs(i, graph, visited); ret++; } } return ret; } }; main(){ Solution ob; vector<vector<int<> v = {{0,1},{1,2},{3,4}}; cout << (ob.countComponents(5, v)); }
入力
5, [[0,1],[1,2],[3,4]]
出力
2
-
C++の無向グラフのすべてのサイクルの長さの積
入力として無向グラフと無加重グラフが与えられます。タスクは、与えられた中で形成されたサイクルの積を見つけて、結果を表示することです。 例 入力 与えられた図では、8つのノードがあり、そのうち5つのノードが1、6、3、5、8を含むサイクルを形成しており、残りのノードはサイクルに含まれていません。したがって、サイクルの長さは5ノードを含むため5であり、したがって積は5です 与えられた図では、12個のノードがあり、そのうち11個(5 +6)個のノードが、1、6、3、5、8、9、4、10、11、22、12および残りのノードを含むサイクルを形成しています。ノード2はサイクルに含まれて
-
グラフが強く接続されているかどうかを確認します-C++でセット1(DFSを使用するKosaraju)
グラフがあるとします。 Kosarajuアルゴリズムを使用して、グラフが強く接続されているかどうかを確認する必要があります。グラフは強く接続されていると言われ、2つの頂点の間にパスがある場合、グラフは接続されます。無向グラフは強く結びついたグラフです。 一部の無向グラフは接続されている可能性がありますが、強く接続されていない可能性があります。これは、強く接続されたグラフの例です。 これは、接続されているが強く接続されていないグラフの例です。 ここでは、コサラジュアルゴリズムの次の手順を使用して、グラフが強く関連しているかどうかを確認する方法を説明します。 手順 −