cpp
cpp
empty()) vis[item_adj] =
case number of nodes 1;
Point and edges: "; { {
isArticulation[u]
#include = true; cin >> n >> e; vis[item_adj] = int curr = s.push(item_adj);
<iostream> 1; q.front();
} DFS(item_adj,
#include <vector> q.pop(); n, adj, vis, s,
else if (v != cout << "Enter q.push(item_adj); result);
#include parent[u]) edges (u v):" << BFS(curr, n, adj,
<algorithm> endl; vis, q, result); }
{ result.push_back(it
using namespace for (int i = 0; i < e; em_adj); } }
std; low[u] = i++)
min(low[u], } cout << "BFS }
const int N = 100; disc[v]); // Update { traversal order:" <<
// Max number of low value } endl;
nodes int u, v;
} } for (auto item : int main()
vector<int> adj[N]; cin >> u >> v; result)
// Adjacency list } int main() {
{
bool visited[N]; } adj[u].push_back(v { cout << "Enter the
); cout << item << number of nodes
int disc[N], low[N], void cout << "Enter the endl; and edges: ";
parent[N]; findArticulationPoi number of nodes
nts(int n) adj[v].push_back(u and edges: "; } int n, e;
bool );
isArticulation[N]; { int n, e; } cin >> n >> e;
}
int timer = 0; fill(visited, visited cin >> n >> e;
+ n, false); findArticulationPoi
void dfs(int u) nts(n); vector<int> adj[n]; vector<int> adj[n];
fill(parent, parent
DFS
{ + n, -1); return 0; queue<int> q; cout << "Enter the
#include node connections
visited[u] = true; fill(isArticulation, } vector<int> vis(n, <iostream> (node1 node2): "
isArticulation + n, 0); << endl;
disc[u] = low[u] = false); #include <stack>
++timer; vector<int> result; for (int i = 0; i < e;
timer = 0; #include <vector> i++)
int children = 0; BFS cout << "Enter
node connections {
(node1 node2): "
for (int i = 0; i < n; << endl; using namespace int u, v;
for (int v : adj[u]) i++) #include std; // Add this
<iostream> for (int i = 0; i < e; line to avoid cin >> u >> v;
{ { i++) prefixing std::
#include <vector>
if (!visited[v]) if (!visited[i]) { adj[u].push_back(v
#include );
{ dfs(i); <algorithm> int u, v; void DFS(int node,
int n,
children++; } #include <queue> cin >> u >> v; adj[v].push_back(u
vector<int> ); // Assuming
parent[v] = u; cout << using namespace adj[], undirected graph
"Articulation std; // Add this adj[u].push_back(v
dfs(v); Points: "; line to avoid ); vector<int> }
prefixing std:: &vis,
for (int i = 0; i < n;
i++) adj[v].push_back(u stack<int> &s,
// Update low ); // Assuming int source;
value of u { void BFS(int undirected graph vector<int>
source, int n, &result) cout << "Enter the
low[u] = if vector<int> adj[], } source node: ";
min(low[u], (isArticulation[i]) {
low[v]); vector<int> int source; cin >> source;
cout << i << " "; &vis, vis[node] = 1;
// Check if u is cout << "Enter the
an articulation } queue<int> source node: ";
point &q, result.push_back(n vector<int> vis(n,
cout << endl; cin >> source; ode); 0);
if (parent[u] == vector<int>
-1 && children > 1) } &result) q.push(source); for (auto stack<int> s;
// Root case &item_adj :
int main() { vis[source] = 1; adj[node]) vector<int> result;