FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
Data-Structures-Algorithms/DisjointSet.java at master · dinolinjob/Data-Structures-Algorithms · GitHub
dinolinjob
/
Data-Structures-Algorithms
Public
forked from
CodersForLife/Data-Structures-Algorithms
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
Data-Structures-Algorithms
/
DisjointSet.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
98 lines (82 loc) · 2.45 KB
Breadcrumbs
Data-Structures-Algorithms
/
DisjointSet.java
Copy path
File metadata and controls
98 lines (82 loc) · 2.45 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
// Java Program for union-find algorithm to detect cycle in a graph
import
java
.
util
.*;
import
java
.
lang
.*;
import
java
.
io
.*;
class
Graph
{
int
V
,
E
;
// V-> no. of vertices & E->no.of edges
Edge
edge
[];
// /collection of all edges
class
Edge
{
int
src
,
dest
;
};
// Creates a graph with V vertices and E edges
Graph
(
int
v
,
int
e
)
{
V
=
v
;
E
=
e
;
edge
=
new
Edge
[
E
];
for
(
int
i
=
0
;
i
<
e
; ++
i
)
edge
[
i
] =
new
Edge
();
}
// A utility function to find the subset of an element i
int
find
(
int
parent
[],
int
i
)
{
if
(
parent
[
i
] == -
1
)
return
i
;
return
find
(
parent
,
parent
[
i
]);
}
// A utility function to do union of two subsets
void
Union
(
int
parent
[],
int
x
,
int
y
)
{
int
xset
=
find
(
parent
,
x
);
int
yset
=
find
(
parent
,
y
);
parent
[
xset
] =
yset
;
}
// The main function to check whether a given graph
// contains cycle or not
int
isCycle
(
Graph
graph
)
{
// Allocate memory for creating V subsets
int
parent
[] =
new
int
[
graph
.
V
];
// Initialize all subsets as single element sets
for
(
int
i
=
0
;
i
<
graph
.
V
; ++
i
)
parent
[
i
]=-
1
;
// Iterate through all edges of graph, find subset of both
// vertices of every edge, if both subsets are same, then
// there is cycle in graph.
for
(
int
i
=
0
;
i
<
graph
.
E
; ++
i
)
{
int
x
=
graph
.
find
(
parent
,
graph
.
edge
[
i
].
src
);
int
y
=
graph
.
find
(
parent
,
graph
.
edge
[
i
].
dest
);
if
(
x
==
y
)
return
1
;
graph
.
Union
(
parent
,
x
,
y
);
}
return
0
;
}
// Driver Method
public
static
void
main
(
String
[]
args
)
{
/* Let us create following graph
0
| \
| \
1-----2 */
int
V
=
3
,
E
=
3
;
Graph
graph
=
new
Graph
(
V
,
E
);
// add edge 0-1
graph
.
edge
[
0
].
src
=
0
;
graph
.
edge
[
0
].
dest
=
1
;
// add edge 1-2
graph
.
edge
[
1
].
src
=
1
;
graph
.
edge
[
1
].
dest
=
2
;
// add edge 0-2
graph
.
edge
[
2
].
src
=
0
;
graph
.
edge
[
2
].
dest
=
2
;
if
(
graph
.
isCycle
(
graph
)==
1
)
System
.
out
.
println
(
"graph contains cycle"
);
else
System
.
out
.
println
(
"graph doesn't contain cycle"
);
}
}
Back
|
FazBrowse Home
|
New Git URL