CC 2
CC 2
#include <iostream>
#include <vector>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <stack>
class Graph {
private:
int vertices;
public:
Graph(int V) : vertices(V) {}
adjacencyList[v].push_back(w);
adjacencyList[w].push_back(v);
unordered_set<int> visited;
stack<int> dfsStack;
dfsStack.push(startVertex);
visited.insert(startVertex);
while (!dfsStack.empty()) {
dfsStack.pop();
if (visited.find(neighbor) == visited.end()) {
dfsStack.push(neighbor);
visited.insert(neighbor);
unordered_set<int> visited;
queue<int> bfsQueue;
bfsQueue.push(startVertex);
visited.insert(startVertex);
while (!bfsQueue.empty()) {
bfsQueue.pop();
if (visited.find(neighbor) == visited.end()) {
bfsQueue.push(neighbor);
visited.insert(neighbor);
};
int main() {
int V;
cin >> V;
Graph graph(V);
int edges;
cin >> edges;
int v, w;
graph.addEdge(v, w);
int startVertex;
graph.dfs(startVertex);
graph.bfs(startVertex);
return 0;
#include <list>
#include <stack>
#include <vector>
class Graph {
int V;
list<int>* adj;
public:
Graph(int V);
void topologicalSort();
};
Graph::Graph(int V) {
this->V = V;
}
void Graph::addEdge(int source, int destination) {
adj[source].push_back(destination);
visited[v] = true;
if (!visited[neighbor]) {
result.push(v);
void Graph::topologicalSort() {
stack<int> result;
if (!visited[i]) {
while (!result.empty()) {
result.pop();
int main() {
Graph graph(numNodes);
for (int i = 0; i < numEdges; ++i) {
graph.addEdge(source, destination);
graph.topologicalSort();
return 0;
Friendship matrix:
#include <iostream>
#include <vector>
adjacencyMatrix[source][destination] = 1;
adjacencyMatrix[destination][source] = 1;
int main() {
edgeList.emplace_back(source, destination);
return 0;
Dijistra’s algorithm:
#include <iostream>
#include <vector>
#include <queue>
#include <limits>
class Graph {
int V;
public:
Graph(int V);
};
Graph::Graph(int V) {
this->V = V;
adj[source].push_back({destination, weight});
pq.push({0, startNode});
dist[startNode] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
int v = neighbor.first;
pq.push({dist[v], v});
cout << "Shortest distance from node " << startNode << " to node " << i << ": ";
if (dist[i] == numeric_limits<int>::max()) {
else {
int main() {
Graph graph(numNodes);
graph.dijkstra(startNode);
return 0;
Kruskal’s algorithm:
#include <iostream>
#include <vector>
#include <algorithm>
struct Edge {
};
struct Subset {
};
class Graph {
private:
int vertices;
vector<Edge> edges;
public:
Graph(int v) : vertices(v) {}
edges.push_back(edge);
if (subsets[i].parent != i)
subsets[xroot].parent = yroot;
subsets[yroot].parent = xroot;
else {
subsets[yroot].parent = xroot;
subsets[xroot].rank++;
void kruskalMST() {
vector<Edge> result;
int e = 0;
int i = 0;
});
subsets[v].parent = v;
subsets[v].rank = 0;
if (x != y) {
result.push_back(next_edge);
Union(subsets, x, y);
i++;
cout << result[i].src << " -- " << result[i].dest << " == " << result[i].weight << endl;
delete[] subsets;
};
int main() {
Graph g(vertices);
cin>>src>>dest>>weight;
g.addEdge(src,dest,weight);
g.kruskalMST();
return 0;
Polynomial time:
#include<iostream>
#include<vector>
c=std::tolower(c);
if(timeComplexity.find("n^")!=std::string::npos) {
return true;
return true;
else if(timeComplexity.find("n")!=std::string::npos) {
return true;
return false;
int main() {
int inputSize;
std::string timeComplexity;
std::cin>>inputSize;
std::cin.ignore();
std::getline(std::cin,timeComplexity);
if(isPolynomialTime(inputSize,timeComplexity)) {
else {
return 0;
NP complete classes:
P vs NP: