Я пытаюсь выяснить, как мне поступить при написании алгоритма (на C #), который при задании:
Набор, как правило, небольших фигур на основе плиток.Часто 2х2, но не всегда.Иногда фигуры могут быть 2x1 или непрямоугольными.
Карта листов (двумерный массив), в которой определенные плитки помечены как «свободные», а некоторые плитки «зарезервированы».Свободные плитки обозначают область, в которой разрешено перемещаться фигурам на основе плиток, зарезервированные плитки не могут быть заняты фигурами.
Пример формы на основе плиток, отличной от 2x2s: http://img850.imageshack.us/img850/9057/awk.png
Пример «доступного пространства» в карте тайлов: http://img641.imageshack.us/img641/8263/spaceh.png
- Белый цвет на этом изображении обозначает пространство, которое будет заполнено, но я хочу алгоритмчтобы можно было работать так же хорошо, если серым было пространство, которое нужно заполнить, а белые были зарезервированы.
По сути, алгоритм должен размещать фигуры в доступном пространстве, смещенные к вершине.Решение, которое оно предлагает, не обязательно должно быть «идеальным», но оно должно всегда быть в состоянии найти решение, если оно существует.Также мне бы очень хотелось, чтобы в этом алгоритме не использовались псевдослучайные числа.Я хочу, чтобы он всегда находил одно и то же решение при одном и том же входе, даже если это решение не самое лучшее.
Я нашел другие темы, связанные с этим, но все они были связаны с заполнениемпрямоугольное пространство, а не произвольное пространство.
РЕДАКТИРОВАТЬ: о, и формы могут быть перевернуты как горизонтально, так и / или вертикально, но не повернуты.Забыл упомянуть об этом.
EDIT2: позвольте мне уточнить.Я не хочу, чтобы пространство было заполнено, я хочу определить, куда должны идти фигуры, учитывая их конечное число.Они должны по умолчанию к вершине.