-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDAA_DFS.cpp
109 lines (106 loc) · 1.51 KB
/
DAA_DFS.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include<stdlib.h>
using namespace std;
#define MAX 30
template<class t>
class node
{
public:
node *next;
int vertex;
};
template<class t>
class graphq
{
public:
int data[MAX];
int rear,front;
void DFS(int);
void readgraph();
int empty(graphq *);
int full(graphq *);
void insert(int vi, int vj);
int discovered[MAX];
int layer[MAX],parent[MAX];
node<t> *heads[MAX];
int n;
};
template<class t>
void graphq<t>::DFS(int i)
{
node<t> *p;
cout<<"\t"<<i;
p=heads[i];
discovered[i]=1;
while(p!=NULL)
{
i=p->vertex;
if(!discovered[i])
{
DFS(i);
}
p=p->next;
}
}
template<class t>
int graphq<t>::empty(graphq *p)
{
if(p->rear==-1)
return(1);
return(0);
}
template<class t>
int graphq<t>::full(graphq *p)
{
if(p->rear==MAX-1)
return(1);
return(0);
}
template<class t>
void graphq<t>::readgraph()
{
int i,vi,vj, nofedges;
cout<<"\nEnter the number of vertices : ";
cin>>n;
for(i=0;i<n;i++)
heads[i]=NULL;
cout<<"\nEnter the number of edges : ";
cin>>nofedges;
for(i=0;i<nofedges;i++)
{
cout<<"\nEnter an edge (u,v) : ";
cin>>vi>>vj;
insert(vi,vj);
insert(vj,vi);
}
}
template<class t>
void graphq<t>::insert(int vi, int vj)
{
node<t>*P;
node<t>*Q;
Q=new node<t>;
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;
graphq<int>gq;
cout<<"\nCreate a node : ";
gq.readgraph();
cout<<"\nDFS";
cout<<"\nStarting node number : ";
cin>>i;
gq.DFS(i);
return 0;
}