public void findPath() {
		Element position;
		Element nextPosition;
		boolean pathFound = false;
		Iterator<Direction> iterator;

		int startDirection = Direction.NORTH;
		Direction mDirection;

		mDirection = directionMap.get(startDirection);
		position = new Element(maze.getEntryElement().getRowIndex(), maze
				.getEntryElement().getColIndex(), mDirection);
		stack.push(position);
		visitMaker[maze.getEntryElement().getRowIndex()][maze.getEntryElement()
				.getColIndex()] = true;
		try {
			while (!stack.isEmpty() && pathFound == false) {
				position = (Element) stack.pop();

				iterator = directionMap.values().iterator();
				
				while (iterator.hasNext() && pathFound == false) {
					int nextRow, nextCol;
					mDirection = (Direction) iterator.next();
					position.setDirection(mDirection);

					nextRow = position.getRowIndex()
							+ position.getDirection().getVertical();
					nextCol = position.getColIndex()
							+ position.getDirection().getHorizontal();
					nextPosition = new Element(nextRow, nextCol);

					if (nextPosition.equals(maze.getExitElement())) {
						stack.push(position);
						stack.push(maze.getExitElement());
						pathFound = true;
					} else if (maze.getMap()[nextRow][nextCol] == Maze.PATH
							&& visitMaker[nextRow][nextCol] == false) {
						// iterator.next();
						visitMaker[nextRow][nextCol] = true;
						stack.push(position);
						iterator = directionMap.values().iterator();
						position = nextPosition;

					} else {
						// iterator.next();
					}
				}
			}

		} catch (NoSuchElementException e) {
			System.out.println("No Such Element");
		}
		if (pathFound == true) {
			printSolve();
		} else {
			System.out.println("Can't Solve");
		}
	}