{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}

# DFS - s.push(new Integer(start visit(start visited[start =...

This preview shows pages 1–2. Sign up to view the full content.

public class DFS { private static int gcd(int a,int b) { if (a==0) return b; if (b==0) return a; return gcd(b,a%b); } private static boolean coprime(int a,int b) { return gcd(a,b)==1; } public static void print(GraphMatrix G) { System.out.println("List of edges:"); for (int u=0; u<G.getNumVertices(); u++) { // traverse through neigbors of u int v=G.nextAdjacent(u,-1); while (v>=0) { if (u<v) // print each edge only once System.out.print(" ["+u+","+v+"]"); v=G.nextAdjacent(u,v); } System.out.println(); } } public static void visit(int node) { System.out.println("Visiting node "+node); } public static void DepthFirstSearch(GraphMatrix G, int start) { System.out.println("Performing depth first search starting in vertex " +start); int n = G.getNumVertices(); // create an array where we mark visited vertices boolean[] visited = new boolean[n]; // initialized to false // create a queue Stack<Integer> s = new Stack<Integer>();

This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: s.push(new Integer(start)); visit(start); visited[start] = true; int last = -1; // last node from which we returned while (!s.isEmpty()) { int u = s.peek().intValue(); // the vertex at the top of stack boolean hasUnvisitedNeighbor = false; for (int v=G.nextAdjacent(u,last); v>=0; v=G.nextAdjacent(u,v)) if (!visited[v]) { s.push(new Integer(v)); visit(v); visited[v] = true; hasUnvisitedNeighbor = true; break; } if (!hasUnvisitedNeighbor) last = s.pop(); } } public static void main(String args) { GraphMatrix G = new GraphMatrix(10); // graph with 10 vertices // add some edges for (int u=0; u<G.getNumVertices(); u++) for (int v=u+1; v<G.getNumVertices(); v++) if (coprime(u,v)) G.addEdge(u,v); // remove some edges for (int u=2; u<G.getNumVertices(); u++) G.removeEdge(u-2,u); print(G); DepthFirstSearch(G,0); DepthFirstSearch(G,9); } }...
View Full Document

{[ snackBarMessage ]}