Сейчас я делаю решатель из 15 головоломок (на с ++), но вместо 15 головоломок моя программа должна решать также головоломки 3x4, 8x8 и т. Д. -> X x Y головоломок.Я должен каким-то образом хранить информацию о посещенных состояниях, моей первой идеей было создать дерево, например:
Пазлы:
Состояние 1
1 2
3 0
Состояние 2
1 3
0 2
Я храню в своем дереве:
root-> 1-> 2->3-> 0
\ _
\ -> 3-> 0-> 2
Это также будет работать для головоломки 5x3, 6x6 и т. Д. Для всех головоломок
Эта идея работает, но она тратит много памяти, и для добавления узла требуется некоторое время: / Так что это очень неэффективно.
Следующая идея состояла в том, чтобы сохранить посещенные состояния в stl std.:: map <>, но я не знаю, как сделать хорошую хэш-функцию - для создания ярлыка из состояния головоломки (потому что мне не нужно хранить состояние головоломки, мне нужна только информация, которую посетили. У вас есть идеи?, для ключа к std :: map или других идей для сохранения информации о том, был ли посещен штат?