Написать программу нахождения всех способов разрезания шахматной доски с числом клеток nxn (n-четное) на две одинаковые по форме части (не считая вращений и отражений).
Моё решение:
Код


Вот программа работает, но преподаватель говорит, что лишку результатов выдаёт при n = 8, нужно где-то 27000, а у меня 92000 Это много... очень много. Вот я и думаю, где ошибка? В разрезании вроде проблемы нет, т.е. в самой рекурсии. Может ошибка в том, как я поставил условие на исключение поворотов и отображений? Может в этом проблема? Но как тогда найти контр пример? Я пробовал, но случаи вроде разные получаются.
Помогите пожалуйста разобраться.

@темы: C++, Алгоритм

Комментарии
02.04.2011 в 15:07

А я что-то не так оформил? Или тут задачи решать не помогают? Что-то я в правилах читал, но не нашёл.
Тогда извиняюсь...
02.04.2011 в 18:16

Беги, беги, не бойся играть судьбою вновь и вновь.
Вопрос по задаче: если доску разрезать пополам горизонтально и разрезать пополам вертикально - это будет два разных решения, или это будет вращение одного и того же решения?
02.04.2011 в 19:48

Беги, беги, не бойся играть судьбою вновь и вновь.
Вопрос отпадает - разобрался. Теперь с кодом. В алгоритм не вникал, но посмотрел результаты. На доске 4x4 отображений или вращений нету железно, так что я не представляю, откуда они могут взяться на доске 8x8. Точнее смогу сказать, когда сам напишу свой код и проверю результаты. Но это будет не раньше послезавтра.
02.04.2011 в 20:25

Merzley, благодарю, сроки не жмут, лишь бы разобраться))
06.04.2011 в 21:35

Вот дописал проверочный код, но наткнулся на проблему. Самый последний массив (где разрезание пополам), не сохраняется, вместо него сохраняется предыдущий результат. Почему так вышло?
А массивы алгоритм правильно вертит, осталось только с этой проблемой разобраться, из-за неё и выдаёт неверный результат.((
07.04.2011 в 23:07

Всем спасибо за внимание, проблема с ответом решена: http://www.cyberforum.ru/cpp-beginners/thread271573.html#post1530643
Но осталась проблема с сохранением последнего массива(