import
java.util.ArrayList;
public
class
CheckPathInUndirectedGraph
{
static
ArrayList<ArrayList<Integer>> graph =
new
ArrayList<>();
static
void
addEdge(
int
v,
int
w) {
graph.get(v).add(w);
graph.get(w).add(v);
}
static
boolean
dfs(ArrayList<Integer>[] adj,
ArrayList<Integer> vis,
int
start,
int
end) {
if
(end == start) {
return
true
;
}
vis.set(start,
1
);
for
(
int
it : adj[start]) {
if
(vis.get(it) ==
0
) {
if
(dfs(adj, vis, it, end)) {
return
true
;
}
}
}
return
false
;
}
static
boolean
validPath(
int
n,
int
[][] edges,
int
start,
int
end)
{
ArrayList<Integer>[] adj =
new
ArrayList[n];
for
(
int
i =
0
; i < n; i++) {
adj[i] =
new
ArrayList<Integer>();
}
for
(
int
i =
0
; i < edges.length; i++) {
int
u = edges[i][
0
];
int
v = edges[i][
1
];
adj[u].add(v);
adj[v].add(u);
}
ArrayList<Integer> vis =
new
ArrayList<>(n);
for
(
int
i =
0
; i < n; i++) {
vis.add(
0
);
}
for
(
int
i =
0
; i < n; i++) {
if
(vis.get(i) ==
0
) {
if
(dfs(adj, vis, start, end)) {
return
true
;
}
}
}
return
false
;
}
public
static
void
main(String[] args) {
int
n =
4
;
for
(
int
i =
0
; i < n; i++) {
graph.add(
new
ArrayList<>());
}
addEdge(
0
,
1
);
addEdge(
0
,
2
);
addEdge(
1
,
2
);
addEdge(
2
,
0
);
addEdge(
2
,
3
);
addEdge(
3
,
3
);
int
u =
1
, v =
3
;
if
(validPath(n,
new
int
[][]{{
0
,
1
},{
0
,
2
},{
1
,
2
},{
2
,
0
},{
2
,
3
},{
3
,
3
}}, u, v)) {
System.out.println(
"There is a path from "
+ u +
" to "
+ v);
}
else
{
System.out.println(
"There is no path from "
+ u +
" to "
+ v);
}
}
}