0% found this document useful (0 votes)
85 views5 pages

Program To Create A Graph and Its Traversal Using Dfs and Bfs

This document contains a C program to create a graph and traverse it using depth-first search (DFS) and breadth-first search (BFS). It defines structures for nodes and links to represent the graph. Functions are included to create the graph from user input, perform DFS traversal using a stack, and perform BFS traversal using a queue. The main function allows the user to choose between the traversal methods or exit.

Uploaded by

Ali Raza Qureshi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
85 views5 pages

Program To Create A Graph and Its Traversal Using Dfs and Bfs

This document contains a C program to create a graph and traverse it using depth-first search (DFS) and breadth-first search (BFS). It defines structures for nodes and links to represent the graph. Functions are included to create the graph from user input, perform DFS traversal using a stack, and perform BFS traversal using a queue. The main function allows the user to choose between the traversal methods or exit.

Uploaded by

Ali Raza Qureshi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 5

Department of Computer Engineering Lab Manual

PROGRAM TO CREATE A GRAPH AND ITS TRAVERSAL USING DFS AND BFS

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

void create(); // For creating a graph


void dfs(); // For Deapth First Search(DFS) Traversal.
void bfs(); // For Breadth First Search(BFS) Traversal.

struct node // Structure for elements in the graph


{
int data,status;
struct node *next;
struct link *adj;
};

struct link // Structure for adjacency list


{
struct node *next;
struct link *adj;
};

struct node *start,*p,*q;


struct link *l,*k;

int main()
{
int choice;
// clrscr();
create();
while(1)
{
cout<<"-----------------------\n\n";
cout<<"1: DFS\n\n2: BSF\n\n3: Exit\n\nEnter your choice: \n";
cin>>choice;
switch(choice)
{
case 1:
dfs();
break;
case 2:
bfs();
break;
case 3:
exit(0);

Data Structures 1
Department of Computer Engineering Lab Manual

break;
default:
cout<<"Incorrect choice!Re-enter your choice.";
getch();
}
}
return 0;
}

void create() // Creating a graph


{
int dat,flag=0;
start=NULL;
cout<<"Enter the nodes in the graph(0 to end): ";
while(1)
{
cin>>dat;
if(dat==0)
break;
p=new node;
p->data=dat;
p->status=0;
p->next=NULL;
p->adj=NULL;
if(flag==0)
{
start=p;
q=p;
flag++;
}
else
{
q->next=p;
q=p;
}
}
p=start;
while(p!=NULL)
{
cout<<"Enter the links to "<<p->data<<" (0 to end) : ";
flag=0;
while(1)
{
cin>>dat;
if(dat==0)
break;

Data Structures 2
Department of Computer Engineering Lab Manual

k=new link;
k->adj=NULL;
if(flag==0)
{
p->adj=k;
l=k;
flag++;
}
else
{
l->adj=k;
l=k;
}
q=start;
while(q!=NULL)
{
if(q->data==dat)
k->next=q;
q=q->next;
}
}
p=p->next;
}
cout<<"-------------------------";
return;
}

// Breadth First Search(BFS) Traversal.


void bfs()
{
int qu[20],i=1,j=0;
p=start;
while(p!=NULL)
{
p->status=0;
p=p->next;
}
p=start;
qu[0]=p->data;
p->status=1;
while(1)
{
if(qu[j]==0)
break;
p=start;

Data Structures 3
Department of Computer Engineering Lab Manual

while(p!=NULL)
{
if(p->data==qu[j])
break;
p=p->next;
}
k=p->adj;
while(k!=NULL)
{
q=k->next;
if(q->status==0)
{
qu[i]=q->data;
q->status=1;
qu[i+1]=0;
i++;
}
k=k->adj;
}
j++;
}
j=0;
cout<<"Breadth First Search Results";
cout<<"---------------------------";
while(qu[j]!=0)
{
cout<<qu[j]<<" ";
j++;
}
getch();
return;
}

// Depthth First Search (DFS) Traversal.


void dfs()
{
int stack[25],top=1;
cout<<"Depth First Search Results";
cout<<"---------------------------";
p=start;
while(p!=NULL)
{
p->status=0;
p=p->next;
}

Data Structures 4
Department of Computer Engineering Lab Manual

p=start;
stack[0]=0;
stack[top]=p->data;
p->status=1;
while(1)
{
if(stack[top]==0)
break;
p=start;
while(p!=NULL)
{
if(p->data==stack[top])
break;
p=p->next;
}
cout<<stack[top]<<" ";
top--;
k=p->adj;
while(k!=NULL)
{
q=k->next;
if(q->status==0)
{
top++;
stack[top]=q->data;
q->status=1;
}
k=k->adj;
}
}
getch();
return;
}

Data Structures 5

You might also like