Skip to content

Instantly share code, notes, and snippets.

@wuqifu
Created July 9, 2015 02:50
Show Gist options
  • Select an option

  • Save wuqifu/ccd5e608b1706d7c64ab to your computer and use it in GitHub Desktop.

Select an option

Save wuqifu/ccd5e608b1706d7c64ab to your computer and use it in GitHub Desktop.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Graph {
public Node rootNode;
public ArrayList<Node> nodes = new ArrayList<Node>();
public int[][] adjMatrix;// Edges will be represented as adjacency Matrix
int size;
public void setRootNode(Node n) {
this.rootNode = n;
}
public Node getRootNode() {
return this.rootNode;
}
public void addNode(Node n) {
nodes.add(n);
}
// This method will be called to make connect two nodes
public void connectNode(Node start, Node end) {
if (adjMatrix == null) {
size = nodes.size();
adjMatrix = new int[size][size];
}
int startIndex = nodes.indexOf(start);
int endIndex = nodes.indexOf(end);
adjMatrix[startIndex][endIndex] = 1;
adjMatrix[endIndex][startIndex] = 1;
}
private Node getUnvisitedChildNode(Node n) {
int index = nodes.indexOf(n);
int j = 0;
while (j < size) {
if (adjMatrix[index][j] == 1 && nodes.get(j).visited == false) {
return nodes.get(j);
}
j++;
}
return null;
}
// BFS traversal of a tree is performed by the bfs() function
public void bfs() {
// BFS uses Queue data structure
Queue q = new LinkedList();
q.add(this.rootNode);
printNode(this.rootNode);
rootNode.visited = true;
while (!q.isEmpty()) {
Node n = (Node) q.remove();
Node child = null;
while ((child = getUnvisitedChildNode(n)) != null) {
child.visited = true;
printNode(child);
q.add(child);
}
}
// Clear visited property of nodes
clearNodes();
}
// DFS traversal of a tree is performed by the dfs() function
public void dfs() {
// DFS uses Stack data structure
Stack s = new Stack();
s.push(this.rootNode);
rootNode.visited = true;
printNode(rootNode);
while (!s.isEmpty()) {
Node n = (Node) s.peek();
Node child = getUnvisitedChildNode(n);
if (child != null) {
child.visited = true;
printNode(child);
s.push(child);
} else {
s.pop();
}
}
// Clear visited property of nodes
clearNodes();
}
// Utility methods for clearing visited property of node
private void clearNodes() {
int i = 0;
while (i < size) {
Node n = nodes.get(i);
n.visited = false;
i++;
}
}
// Utility methods for printing the node's label
private void printNode(Node n) {
System.out.print(n.label + " ");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment