Я нахожусь в процессе создания игры, где пользователю будут представлены 2 набора цветных плиток. Чтобы убедиться, что головоломка разрешима, я начинаю с одного набора, копирую его во второй набор, а затем меняю плитки из одного набора в другой. В настоящее время (и в этом моя проблема) количество свопов определяется уровнем, в котором играет пользователь - 1 своп для уровня 1, 2 свопа для уровня 2 и т. Д. Это то же количество свопов используется в качестве цели в игра. Пользователь должен завершить головоломку, поменяв плитку с одного набора на другой, чтобы два набора соответствовали (по цвету). Порядок плиток в (решаемой пользователем) головоломке не имеет значения, если совпадают 2 набора.
Проблема, с которой я столкнулся, заключается в том, что, поскольку количество перестановок, которые я использовал для создания головоломки, приближается к числу плиток в каждом наборе, головоломка становится легче решать. По сути, вы можете просто перетащить из одного сета в любом порядке, который вам нужен для второго сета, и решить головоломку, оставив множество ходов. Что я собираюсь сделать, так это после того, как я закончу строить головоломку, подсчитать минимальное количество ходов, необходимое для решения головоломки. Опять же, это почти всегда меньше, чем количество свопов, использованных для создания головоломки, особенно когда количество свопов приближается к числу плиток в каждом наборе.
Моя цель - рассчитать сценарий наилучшего случая, а затем дать пользователю «коэффициент выдумки» (т. Е. В 1,2 раза больше минимального количества ходов). Решение головоломки под этим количеством ходов приведет к прохождению уровня.
Небольшая предыстория того, как у меня настроена игра:
Уровни от 1 до 10: 9 плиток в каждом наборе. 5 разноцветных плиток.
Уровни с 11 по 20: 12 плиток в каждом наборе. 7 разноцветных плиток.
Уровни с 21 по 25: 15 плиток в каждом наборе. 10 разноцветных плиток.
Обмен внутри набора недопустим.
Для каждого уровня будет минимум 2 плитки определенного цвета (по одной на каждый набор в решаемой головоломке).
Есть ли какой-нибудь алгоритм, который кто-нибудь мог бы порекомендовать, чтобы вычислить минимальное количество ходов для решения данной головоломки?