Создать головоломку из решения очень просто. Вы просто применяете шаги решения в обратном направлении.
Например, если строка содержит 8 цифр, вы можете заполнить 9-ю. Если вы сделаете это в обратном порядке, если строка содержит 9 цифр, вы можете удалить одну. Это приведет к очень скучной головоломке, но все же верной (действительная головоломка - это головоломка с одним решением).
Чем сложнее будут шаги, которые вы сделаете, тем сложнее будет головоломка. Фактически, перебор головоломки - самая сложная стратегия, ее выполнение в обратном порядке, вероятно, сводится к случайному удалению цифры и проверке грубой силы, есть ли еще только одно уникальное решение. Обратите внимание, что вам не нужно решать всю головоломку: достаточно доказать, что есть только один способ добавить удаленную цифру обратно в головоломку.
Что касается второй части вашего вопроса: это немного похоже на математический вопрос, но позвольте мне ответить:
Хорошая головоломка имеет только одно решение. Поскольку существует несколько головоломок, которые дают одно и то же решение (например, существует 81 способ заполнить 80 из 81 квадрата, каждый из которых дает одно и то же решение из другой головоломки), можно сказать, что головоломок намного больше, чем решений.
Если вы также разрешите головоломки с несколькими решениями, это изменится. Для каждой головоломки должно быть одно или несколько решений, но все эти решения также принадлежат этой головоломке, поэтому количество решений для головоломок равно количеству головоломок для решений. Недействительные головоломки не меняют этого: поскольку они принадлежат к 0 решениям, вам не нужны дополнительные головоломки, принадлежащие этим решениям.
Пс. Также тривиально создавать головоломки, если они не должны быть однозначно решаемыми: просто удалите случайным образом несколько цифр, и все готово.
person
Dorus
schedule
13.05.2015