From e46bb0a2634b3b58ec136793b8b3821f150bac0c Mon Sep 17 00:00:00 2001 From: NasreenParween Date: Thu, 7 Jul 2022 17:47:46 +0530 Subject: [PATCH] Breadth-First Search --- DAA_BFS.cpp | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 DAA_BFS.cpp diff --git a/DAA_BFS.cpp b/DAA_BFS.cpp new file mode 100644 index 0000000..3548b5d --- /dev/null +++ b/DAA_BFS.cpp @@ -0,0 +1,156 @@ +#include +#include +using namespace std; +#define max 30 +template +class node +{ + public: + node *next; + int vertex; +}; +template +class graphq +{ + public: + int data[max]; + int rear,front; + void enqueue(graphq *, int); + int dequeue(graphq *); + int empty(graphq *); + int full(graphq *); + void BFS(int); + void readgraph(); + void insert(int vi, int vj); + int discovered[max]; + int layer[max],parent[max]; + node *heads[max]; + int n; +}; + + +template +void graphq::BFS(int v) +{ + int w,i; + graphq Q; + node *p; + Q.rear=Q.front=-1; + for(i=1;i<=n;i++) + discovered[i]=0; + enqueue(&Q,v); + int ly=0; + layer[v]=ly; + parent[v]=-1; + cout<<"\nVisit "<next) + { + w=p->vertex; + if(discovered[w]==0) + { + parent[w]=v; + layer[w]=layer[parent[w]]+1; + enqueue(&Q,w); + discovered[w]=1; + cout<<"\nVisit "< +int graphq::empty(graphq *p) +{ + if(p->rear==-1) + return(1); + return(0); +} +template +int graphq::full(graphq *p) +{ + if(p->rear==max-1) + return(1); + return(0); +} +template +void graphq::enqueue(graphq *p, int x) +{ + if(p->rear==-1) + { + p->rear=p->front=0; + p->data[p->rear]=x; + } + else + { + p->rear=p->rear+1; + p->data[p->rear]=x; + } +} +template +int graphq::dequeue(graphq *p) +{ + int x; + x=p->data[p->front]; + if(p->rear==p->front) + { + p->rear=-1; + p->front=-1; + } + else + p->front=p->front+1; + return(x); +} +template +void graphq::readgraph() +{ + int i,vi,vj, nofedges; + cout<<"\nEnter the number of vertices : "; + cin>>n; + for(i=0;i>nofedges; + for(i=0;i>vi>>vj; + insert(vi,vj); + insert(vj,vi); + } +} +template +void graphq::insert(int vi, int vj) +{ + node*P; + node*Q; + Q=new node; + Q->vertex=vj; + Q->next=NULL; + if(heads[vi]==NULL) + heads[vi]=Q; + else + { + P=heads[vi]; + while(P->next!=NULL) + P=P->next; + P->next=Q; + } +} +int main() +{ + int i; + graphqgq; + cout<<"\nCreate a node"; + gq.readgraph(); + cout<<"\nBFS"; + cout<<"\nStarting node number : "; + cin>>i; + gq.BFS(i); + return 0; +}