0% found this document useful (0 votes)
6 views3 pages

Graph Program

The document contains a C++ implementation of a graph data structure with methods for adding edges, printing the graph, and performing depth-first search (DFS) and breadth-first search (BFS) traversals. It defines a Graph class that manages an adjacency list and includes a main function to demonstrate its functionality with a sample graph of 11 vertices. The implementation showcases the use of lists for adjacency representation and includes memory management for visited nodes.

Uploaded by

Monette Loy-a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views3 pages

Graph Program

The document contains a C++ implementation of a graph data structure with methods for adding edges, printing the graph, and performing depth-first search (DFS) and breadth-first search (BFS) traversals. It defines a Graph class that manages an adjacency list and includes a main function to demonstrate its functionality with a sample graph of 11 vertices. The implementation showcases the use of lists for adjacency representation and includes memory management for visited nodes.

Uploaded by

Monette Loy-a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Graph Program

#include <list>
#include <iostream>
using namespace std;
class Graph {
private:
int V;
list<int>* adj;
void DFSUtil(int v, bool visited[]);
public:
Graph(int);
void addEdge(int u, int v);
void printGraph();
void DFS(int v);
void BFS(int s);
};
Graph::Graph(int x)
{
V = x;
adj = new list<int>[V];
}
void Graph::addEdge(int u, int v)
{
adj[u].push_back(v);
}
void Graph::printGraph()
{
cout << "Adjacency List..." << endl;
for (int v = 0; v < V; ++v)
{
cout << "V[" << v << "]";
for (auto x : adj[v])
cout << " -> " << x;
cout << endl;
}
}
void Graph::DFS(int v)
{
// Mark all the vertices as not visited
bool* visited = new bool[V];
for (int i = 0; i < V; i++)
visited[i] = false;
// Call the recursive helper function to print DFS traversal
DFSUtil(v, visited);
}
void Graph::DFSUtil(int v, bool visited[])
{
// Mark the current node as visited and print it
visited[v] = true;
cout << v << " ";

// Recur for all the vertices adjacent to this vertex


list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); ++i)
if (!visited[*i])
DFSUtil(*i, visited);
}
// BFS traversal from source vertex `s`
void Graph::BFS(int s) {
bool* visited = new bool[V](); // Initialize visited array
list<int> queue; // Queue for BFS

visited[s] = true;
queue.push_back(s);

list<int>::iterator i;
while (!queue.empty()) {
s = queue.front();
cout << s << " ";
queue.pop_front();

for (i = adj[s].begin(); i != adj[s].end(); ++i) {


if (!visited[*i]) {
visited[*i] = true;
queue.push_back(*i);
}
}
}
cout << endl;
delete[] visited; // Free allocated memory
}
int main()
{
Graph g(11); // Creates a graph with 11 vertices (0 to 10)

g.addEdge(0, 1);
g.addEdge(0, 5);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 5);
g.addEdge(2, 4);
g.addEdge(4, 3);
g.addEdge(5, 6);
g.addEdge(6, 8);
g.addEdge(7, 3);
g.addEdge(7, 8);
g.addEdge(8, 10);
g.addEdge(9, 4);
g.addEdge(9, 7);
g.addEdge(9, 10);

g.printGraph(); // Prints the adjacency list representation

cout << "BFS starting from node 0: ";


g.BFS(0);

cout << "DFS starting from node 0: ";


g.DFS(0);

system("pause"); // Pauses execution (Windows-specific)


}

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy