package com.company.graph.DepthFirstSearch; import java.util.List; import java.util.Stack; public class DepthFirstSearch { private Stack<Vertex> stack; public DepthFirstSearch(){ this.stack=new Stack<>(); } public void dfsRecursive(Vertex vertex){ System.out.print(vertex+"->"); for( Vertex v : vertex.getNeighbourList() ){ if( !v.isVisited() ){ v.setVisited(true); dfsRecursive(v); } } } public void dfsNormal(Vertex root, Vertex end){ stack.add(root); root.setVisited(true); if (root.getData() == end.getData()){ System.out.println("-"); } while( !stack.isEmpty() ){ Vertex actualVertex = stack.pop(); System.out.print(actualVertex+"->"); if (end.getData() == actualVertex.getData()){ break; } for( Vertex v : actualVertex.getNeighbourList() ){ if( !v.isVisited() ){ v.setVisited(true); stack.push(v); } } } } }