Сделайте переменную типа lastOpenElement. При открытие текущего проверяйте не null ли он, если не null, то close (hidden) ну или что там у вас, и присваивайте этой переменной текущий элемент
Запускаете рекурсию, каждый раз берете рандом от остатка предыдущего рандома , начальное рандомное число будет в пределах вашей суммы , можно исключить 0 ( решение в лоб, как вариант)