3
3
import java .util .*;
4
4
5
5
public class AdjListGraph <E > {
6
-
7
6
private Map <E , Vertex > vertices = new HashMap <E , Vertex >();
8
7
9
8
private class Vertex {
10
9
E value ;
11
10
List <Vertex > neighbours = new LinkedList <Vertex >();
12
-
13
11
public Vertex (E value ){
14
12
this .value = value ;
15
13
}
16
-
17
14
@ Override
18
15
public String toString () {
19
16
return value .toString ();
20
17
}
21
18
}
22
19
23
- public void addVertex (E value ){
24
- if (vertices .get (value ) == null ){
25
- vertices .put (value , new Vertex (value ));
26
- }
27
-
28
- }
29
-
30
20
public void addEdge (E first , E second ){
31
21
Vertex f = vertices .get (first );
32
22
Vertex s = vertices .get (second );
33
-
34
23
if (f != null && s != null ){
35
24
f .neighbours .add (s );
36
25
s .neighbours .add (f );
37
26
}
38
27
}
39
28
29
+ public void addVertex (E value ){
30
+ if (vertices .get (value ) == null ){
31
+ vertices .put (value , new Vertex (value ));
32
+ }
33
+ }
34
+
40
35
public void DFT (E start ){
41
36
Vertex v = vertices .get (start );
42
-
43
37
Stack <Vertex > stack = new Stack <Vertex >();
44
38
Set <Vertex > set = new HashSet <Vertex >();
45
-
46
39
stack .push (v );
47
40
set .add (v );
48
-
49
41
while (!stack .empty ()){
50
42
Vertex top = stack .pop ();
51
43
System .out .print (top .value + " " );
52
-
53
44
for (Vertex padosi : top .neighbours ){
54
- if (!set .contains (padosi )){ //agar set mein nhi hai toh hi stack mein daalo aur set mein daalo
45
+ //agar set mein nhi hai toh hi stack mein daalo aur set mein daalo
46
+ if (!set .contains (padosi )){
55
47
stack .push (padosi );
56
48
set .add (padosi );
57
49
}
@@ -61,133 +53,108 @@ public void DFT(E start){
61
53
62
54
public void BFT (E start ){
63
55
Vertex v = vertices .get (start );
64
-
65
56
Queue <Vertex > queue = new LinkedList <Vertex >();
66
57
Set <Vertex > set = new HashSet <Vertex >();
67
-
68
58
queue .add (v );
69
59
set .add (v );
70
-
71
60
while (!queue .isEmpty ()){
72
61
Vertex top = queue .remove ();
73
62
System .out .print (top .value + " " );
74
-
75
63
for (Vertex padosi : top .neighbours ){
76
64
if (!set .contains (padosi )){
77
65
queue .add (padosi );
78
66
set .add (padosi );
79
67
}
80
68
}
81
69
}
82
-
83
70
}
84
71
85
72
public boolean DFS (E start ,E target ){
86
73
Vertex v = vertices .get (start );
87
-
88
74
Stack <Vertex > stack = new Stack <Vertex >();
89
75
Set <Vertex > set = new HashSet <Vertex >();
90
-
91
76
stack .push (v );
92
77
set .add (v );
93
-
94
78
while (!stack .empty ()){
95
79
Vertex top = stack .pop ();
96
80
if (top .value .equals (target )){
97
81
return true ;
98
82
}
99
-
100
83
for (Vertex padosi : top .neighbours ){
101
- if (!set .contains (padosi )){ //agar set mein nhi hai toh hi stack mein daalo aur set mein daalo
84
+ //agar set mein nhi hai toh hi stack mein daalo aur set mein daalo
85
+ if (!set .contains (padosi )){
102
86
stack .push (padosi );
103
87
set .add (padosi );
104
88
}
105
89
}
106
90
}
107
-
108
91
return false ;
109
92
}
110
93
111
94
public boolean BFS (E start , E target ){
112
95
Vertex v = vertices .get (start );
113
-
114
96
Queue <Vertex > queue = new LinkedList <Vertex >();
115
97
Set <Vertex > set = new HashSet <Vertex >();
116
-
117
98
queue .add (v );
118
99
set .add (v );
119
-
120
100
while (!queue .isEmpty ()){
121
101
Vertex top = queue .remove ();
122
102
if (top .value .equals (target )){
123
103
return true ;
124
104
}
125
-
126
105
for (Vertex padosi : top .neighbours ){
127
106
if (!set .contains (padosi )){
128
107
queue .add (padosi );
129
108
set .add (padosi );
130
109
}
131
110
}
132
111
}
133
-
134
112
return false ;
135
113
}
136
114
137
115
public List <LinkedList <E >> connectedComponent (){
138
-
139
116
List <LinkedList <E >> list = new LinkedList <LinkedList <E >>();
140
-
141
117
Stack <Vertex > stack = new Stack <Vertex >();
142
118
Set <Vertex > set = new HashSet <Vertex >();
143
-
144
- int i = 0 ;
145
119
for (Vertex start : vertices .values ()) {
146
120
LinkedList <E > tempList = new LinkedList <E >();
147
121
if (set .contains (start )){
148
122
continue ;
149
123
}
150
-
151
124
stack .push (start );
152
125
set .add (start );
153
-
154
126
while (!stack .empty ()){
155
127
Vertex top = stack .pop ();
156
- // System.out.print(top.value + " ");
157
128
tempList .add (top .value );
158
-
159
129
for (Vertex padosi : top .neighbours ){
160
- if (!set .contains (padosi )){ //agar set mein nhi hai toh hi stack mein daalo aur set mein daalo
130
+ //agar set mein nhi hai toh hi stack mein daalo aur set mein daalo
131
+ if (!set .contains (padosi )){
161
132
stack .push (padosi );
162
133
set .add (padosi );
163
134
}
164
135
}
165
136
}
166
-
167
- // System.out.println();
168
- i ++;
169
137
list .add (tempList );
170
138
}
171
-
172
139
return list ;
173
140
}
174
141
175
- public boolean bipartiteGraph (){
142
+ public boolean isConnected (){
143
+ List <LinkedList <E >> list = this .connectedComponent ();
144
+ return list .size () < 2 ;
145
+ }
176
146
147
+ public boolean bipartiteGraph (){
177
148
Set <Vertex > red = new HashSet <Vertex >();
178
149
Set <Vertex > black = new HashSet <Vertex >();
179
150
Stack <Vertex > stack = new Stack <Vertex >();
180
-
181
151
for (Vertex v : vertices .values ()){
182
152
if (!red .contains (v ) && ! black .contains (v )){
183
153
stack .push (v );
184
154
red .add (v );
185
-
186
155
while (!stack .empty ()){
187
156
Vertex top = stack .pop ();
188
-
189
157
for (Vertex padosi : top .neighbours ){
190
-
191
158
if (red .contains (top )){
192
159
if (red .contains (padosi )) {
193
160
return false ;
@@ -211,37 +178,26 @@ public boolean bipartiteGraph(){
211
178
}
212
179
}
213
180
}
214
-
215
181
return true ;
216
182
}
217
183
218
- public boolean isConnected (){
219
- List <LinkedList <E >> list = this .connectedComponent ();
220
- return list .size () < 2 ;
221
- }
222
-
223
184
public boolean isCyclic (E start ){
224
- Vertex v = vertices .get (start );
225
-
226
- Queue <Vertex > queue = new LinkedList <Vertex >();
227
- Set <Vertex > set = new HashSet <Vertex >();
228
-
229
- queue .add (v );
230
- set .add (v );
231
-
232
- while (!queue .isEmpty ()){
233
- Vertex top = queue .remove ();
234
-
235
- for (Vertex padosi : top .neighbours ){
236
- if (!set .contains (padosi )){
237
- queue .add (padosi );
238
- set .add (padosi );
239
- }else {
240
- return true ;
241
- }
185
+ Vertex v = vertices .get (start );
186
+ Queue <Vertex > queue = new LinkedList <Vertex >();
187
+ Set <Vertex > set = new HashSet <Vertex >();
188
+ queue .add (v );
189
+ set .add (v );
190
+ while (!queue .isEmpty ()){
191
+ Vertex top = queue .remove ();
192
+ for (Vertex padosi : top .neighbours ){
193
+ if (!set .contains (padosi )){
194
+ queue .add (padosi );
195
+ set .add (padosi );
196
+ }else {
197
+ return true ;
242
198
}
243
199
}
244
-
200
+ }
245
201
return false ;
246
202
}
247
203
}
0 commit comments