Process:
Program:
/* BFS */ #include<iostream> using namespace std; class Node { public: int vertex; int weight; Node *next; Node() { vertex = weight = -1; next = NULL; } Node(int v,int w=1) { vertex = v; weight = w; next = NULL; } }; class Queue { int front,rear; int data[100]; int n; public: Queue() { front=rear=-1; n = 100; } int isEmpty() { if(front == -1 || front > rear) { return 1; } return 0; } int isFull() { if( rear == n-1 ) { return 1; } return 0; } void enqueue(int val) { if( isFull() ) { cout<<"\n\n Queue is Full !"; return; } else { if(front == -1) front++; rear++; data[rear] = val; } } int dequeue() { if(isEmpty()) { cout<<"\n\n Queue is Underflow! "; return -1; } else { int res = data[front]; front++; return res; } } }; class Graph { Node *head[15]; int dir,weighted,n; int start; public: Graph() { cout<<"\n\n Enter Number of vertices:"; cin>>n; cout<<"\n Enter start vertices:"; cin>>start; cout<<"\n Enter 1-Directed 0-Non-Directed:"; cin>>dir; cout<<"\n Enter 1-Weighted 0-Non-Weighted:"; cin>>weighted; for(int i=0;i<n;i++) { head[i] = NULL; } } void bfs(int v); void readGraphByEdges(); void insert(int u,int v,int w); }; void Graph::bfs(int v) { int visited[n]; for(int i=0;i<n;i++) visited[i] = 0; Queue q; cout<<"\n\n BFS:"; cout<<"\n Visit: "<<v; q.enqueue(v); visited[v] = 1; while( !q.isEmpty()) { v = q.dequeue(); Node *p = head[v]; while(p != NULL) { if(visited[p->vertex] == 0 ) { cout<<"\n Visit: "<<p->vertex; q.enqueue(p->vertex); visited[p->vertex] = 1; } p = p->next; } } } void Graph::readGraphByEdges() { cout<<"\n\n Enter "<<n<<" vertices Edges:"; int u,v,w; while(1) { if(weighted == 0) { cout<<"\n Enter u,v Edges:"; cin>>u>>v; if(u == -1 || v == -1) return; if(dir == 0) { insert(u,v,1); insert(v,u,1); } else { insert(u,v,1); } } else { cout<<"\n Enter u,v,w Edges:"; cin>>u>>v>>w; if(u == -1 || v == -1) return; if(dir == 0) { insert(u,v,w); insert(v,u,w); } else { insert(u,v,w); } } } } void Graph::insert(int u,int v,int w=1) { Node *p = head[u]; if( p == NULL) { head[u] = new Node(v,w); } else { while(p->next != NULL) { if(p->vertex == v) { cout<<"\n\n Vertex Already Present!"; return; } p = p->next; } p->next = new Node(v,w); } } int main() { Graph g; g.readGraphByEdges(); g.bfs(0); return 0; }
Input File:
6 0 0 0 0 1 0 2 1 3 1 4 2 3 2 5 4 3 4 5 5 3 -1 -1
Output: