private boolean startAlgorithm () {
        addToOpenedCells(startCell);
        while (true) {
            int selectedCellIndex = getNextCellIndex();
            Point selectedCell = openedCells.get(selectedCellIndex);

            removeFromOpenedCells(selectedCellIndex);
            addToClosedCells(selectedCell);

            if (processAdjoiningCells(selectedCell)) {
                return true;
            }

            if (openedCells.isEmpty()) {
                return false;
            }
            delay();
        }
    }