Skip to content

Instantly share code, notes, and snippets.

@ibogun
Created April 20, 2016 14:59
Show Gist options
  • Save ibogun/64072ad6c514f02443aa59e71964b81b to your computer and use it in GitHub Desktop.
Save ibogun/64072ad6c514f02443aa59e71964b81b to your computer and use it in GitHub Desktop.
package graphs;
import java.util.Arrays;
import java.util.Stack;
public class DFS {
private Color[] colors;
private Integer[] predecessors;
private Integer[] distances;
private Graph graph;
boolean debug = true;
public enum Color {
WHITE, GRAY, BLACK;
}
public DFS(Graph g_) {
graph = g_;
colors = new Color[g_.V()];
predecessors = new Integer[g_.V()];
distances = new Integer[g_.V()];
}
public void dfs(int source) {
if (source < 0 || source >= graph.V()) {
throw new IndexOutOfBoundsException();
}
for (int u = 0; u < graph.V(); u++) {
if (u != source) {
colors[u] = Color.WHITE;
distances[u] = Integer.MAX_VALUE;
predecessors[u] = null;
}
}
colors[source] = Color.GRAY;
distances[source] = 0;
predecessors[source] = null;
Stack<Integer> q = new Stack<Integer>();
q.add(source);
while (!q.isEmpty()) {
Integer u = q.pop();
for (Integer v : graph.adj(u)) {
if (colors[v] == Color.WHITE) {
colors[v] = Color.GRAY;
distances[v] = distances[u] + 1;
predecessors[v] = u;
q.add(v);
}
}
colors[u] = Color.BLACK;
if (debug) {
System.out.println(this);
}
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(Arrays.toString(colors));
sb.append("\n");
sb.append(Arrays.toString(distances));
sb.append("\n");
sb.append(Arrays.toString(predecessors));
sb.append("\n");
return new String(sb);
}
public static void main(String[] args) {
int V = 8;
Graph g = new Graph(V);
g.addUndirectedEdge(0, 1);
g.addUndirectedEdge(1, 2);
g.addUndirectedEdge(2, 3);
g.addUndirectedEdge(3, 4);
g.addUndirectedEdge(3, 5);
g.addUndirectedEdge(4, 5);
g.addUndirectedEdge(5, 6);
g.addUndirectedEdge(4, 7);
g.addUndirectedEdge(6, 7);
System.out.println(g);
DFS dfs = new DFS(g);
dfs.dfs(0);
System.out.println(dfs);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment