-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbfs.cpp
96 lines (96 loc) Β· 1.68 KB
/
bfs.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
#include<stdio.h>
int q[20],f=-1,r=-1;
typedef struct{
int col;
int d;
int pi;
}node;
int isEmpty()
{
if(f==-1&&r==-1)
return 1;
else
return 0;
}
void Enqueue(int k)
{
if(f==-1&&r==-1)
{
f=r=0;
q[f]=k;
}
else{
r=(r+1)%10;
q[r]=k;
}
}
int Dequeue(){
int ret;
if(f==r){
ret=q[f];
f=r=-1;
}
else{
ret=q[f];
f=(f+1)%10;
}
return ret;
}
void bfs(int g[][30],int n,node *v,int start)
{
for(int i=0;i<n;i++)
{
if(i!=start)
{
v[i].col=0;
v[i].d=35555;
v[i].pi=-1;
}
}
v[start].col=1;
v[start].d=0;
v[start].pi=-1;
Enqueue(start);
while(!isEmpty())
{
int u=Dequeue();
for(int i=0;i<n;i++)
{
if(i!=u)
{
if(g[u][i]==1&&v[i].col==0)
{
v[i].col=1;
v[i].d=v[u].d+1;
v[i].pi=u;
Enqueue(i);
}
}
}
v[u].col=2;
}
}
int main()
{
int n,startnode;
printf("Enter the number of vertices:\n");
scanf("%d",&n);
int g[30][30]={0};
node v[n];
printf("Enter the start node:\n");
scanf("%d",&startnode);
printf("Enter the adjacency matrix:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&g[i][j]);
}
}
bfs(g,n,v,startnode);
printf("\nNode\t\tDistance from source: %d\t\t Parent\n",startnode);
for(int i=0;i<n;i++)
{
printf("Node:\n%d\t\t\t%d\t\t%d\t\t\t\t\n",i,v[i].d,v[i].pi);
}
}