Create a program to represent a graph using an adjacency Matrix and perform Breadth-First Search (BFS) to systematically visit all vertices.
CODE:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class Graph {
private:
int numVertices;
vector<vector<int>> adjacencyMatrix;
public:
Graph(int numVertices) {
this->numVertices = numVertices;
adjacencyMatrix.resize(numVertices, vector<int>(numVertices, 0));
}
void addEdge(int source, int destination) {
adjacencyMatrix[source][destination] = 1;
// For undirected graph, add this line as well:
// adjacencyMatrix[destination][source] = 1;
}
void BFS(int startVertex) {
vector<bool> visited(numVertices, false);
queue<int> q;
visited[startVertex] = true;
q.push(startVertex);
while (!q.empty()) {
int currentVertex = q.front();
cout << currentVertex << " ";
q.pop();
for (int i = 0; i < numVertices; ++i) {
if (adjacencyMatrix[currentVertex][i] == 1 && !visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
}
};
int main() {
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
cout << "Breadth First Traversal (starting from vertex 2): ";
g.BFS(2);
cout << endl;
return 0;
}