Есть поле

клеток. Под одной из клеток - спрятано сокровище. На соседних (по горизонтали/вертикали) клетках с сокровищем стоят флажки. Игрок делает ходы, переворачивая одну клетку за один ход, проверяя таким образом наличие сокровища. Когда перевернет клетку с сокровищем - игра заканчивается.
Вопрос: какая должна быть стратегия переворачивания клеток, чтобы игрок отыскал сокровище за минимальное количество ходов?
Пара примеров игровых полей. Символом X обозначены флажки, символом

- сокровище.
(Оффтоп)
Мне пока пришла в голову только очевидная стратегия: начинать с произвольной клетки, и если это не клетка флажка - открывать соседние с ней по диагоналям. Если натыкаешься на клетку флажка - открывать соседние по горизонтали/вертикали. Но, возможно, математики смогут придумать что-то по-хитрее?