#include <iostream> #include <vector> #include <queue> using namespace std; // Function to perform BFS on the graph void bfs(const vector<vector<int>>& adjList, int startNode) { // Queue to store the nodes for BFS traversal queue<int> q; // Vector to keep track of visited nodes vector<bool> visited(adjList.size(), false); // Start the BFS from the startNode visited[startNode] = true; // Mark the startNode as visited q.push(startNode); // Push the startNode into the queue // Perform BFS while (!q.empty()) { // Get the front node of the queue int currentNode = q.front(); q.pop(); // Remove it from the queue // Process the current node (here, we simply print it) cout << currentNode << " "; // Visit all neighbors of the current node for (int neighbor : adjList[currentNode]) { if (!visited[neighbor]) { visited[neighbor] = true; // Mark the neighbor as visited q.push(neighbor); // Add it to the queue for further exploration } } } } int main() { // Variables to store the number of nodes and edges int nodes, edges; // Input number of nodes and edges cout << "Enter the number of nodes: "; cin >> nodes; cout << "Enter the number of edges: "; cin >> edges; // Create an adjacency list for the graph vector<vector<int>> adjList(nodes); // Input all edges cout << "Enter the edges (format: u v for an edge between u and v):\n"; for (int i = 0; i < edges; i++) { int u, v; cin >> u >> v; adjList[u].push_back(v); // Add edge from u to v adjList[v].push_back(u); // Add edge from v to u (for undirected graph) } // Input the starting node for BFS int startNode; cout << "Enter the starting node for BFS: "; cin >> startNode; // Perform BFS traversal cout << "BFS traversal starting from node " << startNode << ": "; bfs(adjList, startNode); return 0; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter