FinalLabreport
FinalLabreport
Code:
#include <bits/stdc++.h>
vector<int> v[x];
set<int> ans;
int timer;
ar[node] = 1;
int cnt = 0;
if (child == par)
continue;
if (ar[child] == 1)
else
dfs(child, node);
cnt++;
ans.insert(node);
ans.insert(node);
int main()
int n, m, a, b;
while (1)
if (n == 0 && m == 0)
break;
v[i].clear();
ar[i] = 0;
timer = 1;
ans.clear();
v[a].push_back(b);
v[b].push_back(a);
if (ar[i] == 0)
dfs(i, -1);
cout << ans.size() << " articulation point found at node: ";
}return 0;
}
Output:
Lab Experiment No:03
Code:
#include <bits/stdc++.h>
using namespace std;
int n, e;
const int N = 1e5 + 10;
vector<int> g[N], gt[N];
vector<bool> vis(N);
stack<int> s;
void dfs2(int vertex, set<int> &component)
{
vis[vertex] = true;
component.insert(vertex);
for (int child : g[vertex])
{
if (!vis[child])
{
dfs2(child, component);
}
}
}
void dfs(int vertex)
{
vis[vertex] = true;
for (int child : gt[vertex])
{
if (!vis[child])
{
dfs(child);
}
}
s.push(vertex);
}
void solve()
{
int scc = 0;
cout<<"Enter the number of vertices and Edges:";
cin >> n >> e;
vector<set<int>> stronglyConnectedComponents;
cout<<"Enter connected vertices:"<<endl;
for (int i = 1; i <= e; i++)
{
int u, v;
cin >> u >> v;
g[u].push_back(v);
if (u == v)
scc++;
}
for (int i = 1; i <= n; i++)
{
if (!vis[i])
{
dfs(i);
}
}
fill(vis.begin(), vis.end(), false);
while (!s.empty())
{
int a = s.top();
s.pop();
if (!vis[a])
{
set<int> component;
dfs2(a, component);
stronglyConnectedComponents.push_back(component);
scc++;
}
}
cout << "Number of Strongly Connected Components: " << scc << endl;
cout << "Strongly Connected Components Sets:" << endl;
for (const auto &component : stronglyConnectedComponents)
{
for (int node : component)
{
cout << node << " ";
}
cout << endl;
}
}
int main()
{
int t = 1;
while (t--)
{
solve();
}
return 0;
}
Output:
Graph:
Lab Experiment No:06
Code:
#include <bits/stdc++.h>
using namespace std;
int lcs(string s1, string s2, int n, int m)
{
int dp[n + 1][m + 1];
for (int i = 0; i <= n; i++)
{
for (int j = 0; j <= m; j++)
{
if (i == 0 || j == 0)
dp[i][j] = 0;
else if (s1[i - 1] == s2[j - 1])
dp[i][j] = 1 + dp[i - 1][j - 1];
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
int i = n, j = m;
string s = "";
while (i > 0 && j > 0)
{
if (s1[i - 1] == s2[j - 1])
{
s.push_back(s1[i - 1]);
i--;
j--;
}
else
{
if (dp[i - 1][j] > dp[i][j - 1])
i--;
else
j--;
}
}
reverse(s.begin(), s.end());
cout<< dp[n][m];
cout << endl<< "LCS: " << s << endl;
return dp[n][m];
}
int main()
{
string s1, s2;
cout << "Enter the first string" << endl;
cin >> s1;
cout << "Enter the second string" << endl;
cin >> s2;
int n = s1.length(), m = s2.length();
cout << endl
<< "The length of longest common subsequence: " << lcs(s1,
s2, n, m) << endl
<< endl;
}
Output:
Lab Experiment No:05
Code:
#include<bits/stdc++.h>
using namespace std;
pair<int, vector<int>> knapsack(int W, int wt[], int val[], int n) {
vector<vector<int>> dp(n + 1, vector<int>(W + 1, 0));
vector<vector<bool>> selected(n + 1, vector<bool>(W + 1,
false));
Output:
Lab Experiment No:04
Code:
#include <bits/stdc++.h>
int main()
{
int n, m;
cout<<"Enter the number of vertices and
Edges:";
cin >> n >> m;
cout<<"Enter start_nodes,dis-
nodes,values:"<<endl;
for (int i = 0; i < m; ++i)
{
int v1, v2, w;
cin >> v1 >> v2 >> w;
v1--;
v2--;
e[v1].push_back(make_pair(v2, w));
e[v2].push_back(make_pair(v1, w));
}
s.insert(make_pair(d[0], 0));
while (!s.empty())
{
int v = s.begin()->second;
s.erase(s.begin());
for (int i = 0; i < (int)e[v].size(); ++i)
{
int prvi = e[v][i].first;
int w = e[v][i].second;
shortestPath.push_back(1);
return 0;
}
Output:
Graph: