Deep First Search Algorithm