Я пытаюсь создать алгоритм, способный решить большой набор плиток в задаче о мозаике. Прямо сейчас он может найти правильные плитки для размещения на основе их ширины и высоты, но есть некоторые проблемы с тем, чтобы сделать его правильно рекурсивным.
Как видите, идея состоит в том, что после каждой размещенной плитки поле будет разделено на поле справа и поле внизу. Алгоритм сначала попытается заполнить поле справа, и как только это будет сделано, он должен начать попытки заполнить поле снизу.
Проблема, с которой я сталкиваюсь, заключается в том, что после того, как поле «Право» решено, его нужно «отправить обратно» каким-то образом (я думаю, используя рекурсию, хотя это довольно сложно), чтобы заставить его вернуться на плитку и перейти к полю ниже, которое принадлежит к этой плитке. Я поместил идею в некоторый псевдокод, чтобы было немного легче следовать.
Как вы можете видеть, когда FieldRightWidth решен и FieldBelowHeight также решен, я хочу, чтобы он вернулся к предыдущей плитке, чтобы проверить, решен ли FieldBelow. Я думаю, что именно здесь мне нужно поместить некоторый код, чтобы это заработало, но после нескольких часов гугления я так и не понял.
Псевдокод:
def Methods:
create global tileset
create local tileset (without duplicates)
If globaltiles is empty:
solved
end
else:
if fieldRightWidth == solved:
if fieldBelowHeight == solved:
return True???
#FIELD BELOW
else:
Search for Tile
Place Tile
Return Methods
#FIELD RIGHT
else:
Search for Tile
Place Tile
Return Methods
И изображение того, что я хочу, чтобы алгоритм делал:
И весь код: http://pastebin.com/8t4PeiZP
http://www.filedropper.com/tilingnew
Я все еще новичок в кодировании, поэтому любые советы или помощь очень ценятся!