forked from singhmayank980/Hactoberfest2021
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGenericGraph.java
More file actions
114 lines (82 loc) · 1.74 KB
/
Copy pathGenericGraph.java
File metadata and controls
114 lines (82 loc) · 1.74 KB
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
110
111
112
113
114
package competitiveProgramming;
import java.util.*;
public class GenericGraph <T> {
private HashMap<T, LinkedList<T>> map;
private List<T> dfs_vis = new ArrayList<>();
public GenericGraph() {
map = new HashMap<>();
}
public void addVertex(T label) {
map.put(label, new LinkedList<T>());
}
public void addEdge(T init, T fin, boolean undirected) {
if(!map.containsKey(init)) {
addVertex(init);
}
if(!map.containsKey(fin)) {
addVertex(fin);
}
map.get(init).add(fin);
if(undirected) {
map.get(fin).add(init);
}
}
public boolean hasVertex(T v) {
return map.containsKey(v);
}
public boolean hasEdge(T src, T des) {
return map.get(src).contains(des);
}
public int numVertices() {
return map.keySet().size();
}
@Override
public String toString() {
String s = "";
for(T i: map.keySet()) {
s += i.toString() + ":";
for(T j: map.get(i)) {
s += j.toString() + " ";
}
s += "\n";
}
return s;
}
public List<T> dfs(T n) {
dfs_vis.add(n);
for(T i : map.get(n)) {
if(!dfs_vis.contains(i)) {
dfs(i);
}
}
return dfs_vis;
}
public HashMap<T, Integer> bfs(T n) {
int v = numVertices();
Queue<T> q = new LinkedList<>();
ArrayList<T> vis = new ArrayList<>();
HashMap<T, Integer> dis = new HashMap<>();
q.add(n);
vis.add(n);
dis.put(n, 0);
while(!q.isEmpty()) {
T cur = q.poll();
for(T i : map.get(cur)) {
if(!vis.contains(i)) {
vis.add(i);
dis.put(i, dis.get(cur) + 1);
q.add(i);
}
}
}
return dis;
}
public boolean hasPath(T src, T des) {
ArrayList<T> dfs_list = (ArrayList<T>) dfs(src);
if(dfs_list.contains(des)) {
return true;
} else {
return false;
}
}
}