特定のグラフがC++を使用したDFSを使用した2部グラフであるかどうかを確認します
2部グラフは、グラフの彩色が2色のみを使用して可能である場合にグラフです。セット内の頂点は同じ色で色付けされます。これは、グラフが2部グラフであるかどうかをDFSを使用してチェックするC++プログラムです。
アルゴリズム
Begin An array color[] is used to stores 0 or 1 for every node which denotes opposite colors. Call function DFS from any node. If the node w has not been visited previously, then assign ! color[v] to color[w] and call DFS again to visit nodes connected to w. If at any instance, color[u] is equal to !color[v], then the node is bipartite. Modify the DFS function End
例
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
void addEd(vector<int> adj[], int w, int v) //adding edge to the graph
{
adj[w].push_back(v); //add v to w’s list
adj[v].push_back(w); //add w to v’s list
}
bool Bipartite(vector<int> adj[], int v,
vector<bool>& visited, vector<int>& color)
{
for (int w : adj[v]) {
// if vertex w is not explored before
if (visited[w] == false) {
// mark present vertex as visited
visited[w] = true;
color[w] = !color[v]; //mark color opposite to its parents
if (!Bipartite(adj, w, visited, color))
return false;
}
// if two adjacent are colored with same color then the graph is not bipartite
else if (color[w] == color[v])
return false;
}
return true;
}
int main()
{
int M = 6;
vector<int> adj[M + 1];
// to keep a check on whether a node is discovered or not
vector<bool> visited(M + 1);
vector<int> color(M + 1); //to color the vertices of
the graph with 2 color
addEd(adj, 3, 2);
addEd(adj, 1, 4 );
addEd(adj, 2, 1);
addEd(adj, 5, 3);
addEd(adj, 6, 2);
addEd(adj, 3, 1);
visited[1] = true;
color[1] = 0;
if (Bipartite(adj, 1, visited, color)) {
cout << "Graph is Bipartite";
} else {
cout << "Graph is not Bipartite";
}
return 0;
} 出力
Graph is not Bipartite
-
DFSを使用して無向グラフの接続性をチェックするC++プログラム
グラフの接続性を確認するために、トラバーサルアルゴリズムを使用してすべてのノードをトラバースしようとします。トラバーサルの完了後、アクセスされていないノードがある場合、グラフは接続されていません。 無向グラフの場合、1つのノードを選択し、そこからトラバースします。 この場合、トラバーサルアルゴリズムは再帰的なDFSトラバーサルです。 入力 −グラフの隣接行列 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0
-
DFSを使用して有向グラフの接続性をチェックするC++プログラム
グラフの接続性を確認するために、トラバーサルアルゴリズムを使用してすべてのノードをトラバースしようとします。トラバーサルの完了後、アクセスされていないノードがある場合、グラフは接続されていません。 有向グラフの場合、接続を確認するためにすべてのノードからトラバースを開始します。 1つのエッジに外向きのエッジのみがあり、内向きのエッジがない場合があるため、他の開始ノードからノードにアクセスできなくなります。 この場合、トラバーサルアルゴリズムは再帰的なDFSトラバーサルです。 入力 :グラフの隣接行列 0 1 0 0 0 0 0 1 0